Spring缓存与缓存管理器的区别

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的名称为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个回答

8

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

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

我知道这些名称重叠很令人困惑,但从上面的内容中应该清楚哪些类来自哪个库以及为什么使用它们。


1
这证实了我的理解是正确的。你不觉得 ehcacheManager 对于那个 bean 来说会是一个更合适的名称吗? - Marcel Stör
1
@MarcelStör:你可能是对的。请随意打开拉取请求,以更正文档。 - Tomasz Nurkiewicz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接