Spring缓存与缓存管理器

Mar*_*tör 8 spring ehcache

Spring手册中的以下示例混淆了我.

<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"/>
Run Code Online (Sandbox Code Playgroud)

命名约定要求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>
Run Code Online (Sandbox Code Playgroud)

有一个叫做cacheManager引用bean 的属性ehcache.

我误解了什么,或者它真的令人困惑吗?设计中的设计不好或命名错误?

Tom*_*icz 7

Spring框架最近引入了具有中央界面的缓存抽象org.springframework.cache.CacheManager.该接口几乎没有内置实现,包括:

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

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