Spring缓存与缓存管理器

时间:2013-01-07 22:27:02

标签: spring ehcache

Spring manual中的以下示例混淆了我。

<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实例。然而,bean被称为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的bean。

我是否误解了任何事情或是否真的令人困惑?设计中的设计不好或命名错误?

1 个答案:

答案 0 :(得分:7)

Spring框架最近引入了caching abstractionorg.springframework.cache.CacheManager中心接口。该接口几乎没有内置实现,包括:

此设计允许您在不触及应用程序代码的情况下切换缓存库。正如您所看到的,其中一个内置实现由EhCache支持。但请注意EhCacheCacheManager只是Spring缓存抽象和EhCache库之间的桥梁。因此,它需要现有的net.sf.ehcache.CacheManager。您可以自己创建此缓存管理器的实例,也可以利用现有的工厂bean,即EhCacheManagerFactoryBean

我理解它因为名称重叠而令人困惑,但从上面应该清楚哪些类来自哪个库以及它们为何被使用。