9

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"/>

命名约定要求EhCacheManagerFactoryBean产生一个缓存管理器,更准确地说它是一个net.sf.ehcache.CacheManager实例。然而,bean 被称为ehcachenot ehcachemanager。然而,实际的cacheManagerbean 引用了这个 bean。

在散文中,您可以说一个是 Ehcache 缓存管理器,而另一个是 Spring 缓存管理器(由前者支持)。

如果你使用它会变得更糟EhCacheFactoryBean

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

有一个名为的属性cacheManager引用了一个名为ehcache.

我是不是误会了什么,还是真的那么令人困惑?示例中的糟糕设计或只是糟糕的命名?

4

1 回答 1

8

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

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

我知道由于名称重叠而令人困惑,但是从上面应该清楚哪些类来自哪个库以及为什么使用它们。

于 2013-01-07T22:35:28.510 回答