2013-01-07 65 views
7

以下Spring manual示例混淆了我。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"/> 

的命名約定強制要求EhCacheManagerFactoryBean產生緩存經理,更準確地說這是一個net.sf.ehcache.CacheManager實例。然而,該豆被稱爲ehcache而不是ehcachemanager。然而,實際的cacheManager引用這個bean。

散文中可以說一個是Ehcache緩存管理器,另一個是Spring緩存管理器(由前者支持)。

如果使用EhCacheFactoryBean更糟糕:

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

有一個叫cacheManager屬性,它引用了一個叫豆ehcache

我誤解了任何東西,還是真的讓人困惑?糟糕的設計或只是在例子中錯誤的命名?

回答

5

彈簧框架最近推出caching abstractionorg.springframework.cache.CacheManager中央接口。這個接口有幾個內置的實現,其中包括:

這種設計允許你切換而不觸及應用程序代碼緩存庫。正如您可以看到其中一個內置實現由EhCache支持。但請注意,EhCacheCacheManager只是Spring緩存抽象和EhCache庫之間的橋樑。因此它需要現有的net.sf.ehcache.CacheManager。您可以自己創建此緩存管理器的實例,也可以利用現有的工廠Bean,即EhCacheManagerFactoryBean

我知道這是因爲名稱重疊而引起的混淆,但是從上面應該清楚哪些類來自哪個庫以及它們爲什麼被使用。

+1

這證實了我的理解是正確的。你不覺得'ehcacheManager'會是那個bean更合適的名字嗎? –

+1

@MarcelStör:你可能是對的。隨意修改文檔,打開[pull-request](https://github.com/SpringSource/spring-framework)。 –