2013-01-07 13 views
7

Das folgende Beispiel aus der Spring manual verwirrt mich aus dem Häuschen.Spring cache vs. cachemanger

<bean id="cacheManager" 
     class="org.springframework.cache.ehcache.EhCacheCacheManager" 
     p:cache-manager-ref="ehcache"/> 

<!-- Ehcache library setup --> 
<bean id="ehcache" 
     class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
     p:config-location="ehcache.xml"/> 

Die Namenskonvention verlangt, dass EhCacheManagerFactoryBean einen Cache Manager erzeugt, genauer gesagt ist es eine net.sf.ehcache.CacheManager Instanz. Dennoch heißt die Bohne ehcache nicht ehcachemanager. Die tatsächliche cacheManager verweist jedoch auf diese Bean.

In Prosa könnte man sagen, dass man der Ehcache-Cache-Manager ist, während der andere der Spring-Cache-Manager ist (der von dem ehemaligen unterstützt wird).

Es wird noch schlimmer, wenn Sie die EhCacheFactoryBean verwenden:

<bean 
    id="myCache" 
    class="org.springframework.cache.ehcache.EhCacheFactoryBean"> 
    <property name="cacheManager"> 
    <ref local="ehcache" /> 
    </property> 

Es gibt eine Eigenschaft ist genannt cacheManager, die eine Bohne ehcache genannt verweist.

Habe ich etwas falsch verstanden oder ist das wirklich so verwirrend? Schlechtes Design oder nur schlechte Benennung im Beispiel?

Antwort

5

Spring Rahmen vor kurzem eingeführt caching abstraction mit org.springframework.cache.CacheManager zentrale Schnittstelle. Diese Schnittstelle hat wenige integrierten Implementierungen, zB:

Dieses Design ermöglicht es Ihnen, das Caching-Bibliothek zu wechseln, ohne den Anwendungscode zu berühren. Wie Sie sehen können, wird eine dieser integrierten Implementierungen von EhCache unterstützt. Beachten Sie jedoch, dass EhCacheCacheManager nur eine Brücke zwischen der Spring-Caching-Abstraktion und der EhCache-Bibliothek ist. So benötigt es bestehende net.sf.ehcache.CacheManager. Sie können entweder selbst eine Instanz dieses Cache-Managers erstellen oder die vorhandene Factory-Bean nutzen, nämlich EhCacheManagerFactoryBean.

Ich verstehe, dass es wegen überlappender Namen verwirrend ist, aber aus dem oben Gesagten sollte klar sein, welche Klassen aus welcher Bibliothek stammen und warum sie verwendet werden.

+1

Dies bestätigt, dass mein Verständnis korrekt war. Meinst du nicht, ehcacheManager wäre dann ein geeigneterer Name für diese Bohne? –

+1

@ MarcelStör: Sie könnten Recht haben. Fühlen Sie sich frei, [pull-request] (https://github.com/SpringSource/spring-framework) mit korrigierter Dokumentation zu öffnen. –