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。
我是否误解了任何事情或是否真的令人困惑?设计中的设计不好或命名错误?
答案 0 :(得分:7)
Spring框架最近引入了caching abstraction和org.springframework.cache.CacheManager
中心接口。该接口几乎没有内置实现,包括:
ConcurrentMapCacheManager
EhCacheCacheManager
NoOpCacheManager
SimpleCacheManager
此设计允许您在不触及应用程序代码的情况下切换缓存库。正如您所看到的,其中一个内置实现由EhCache支持。但请注意EhCacheCacheManager
只是Spring缓存抽象和EhCache库之间的桥梁。因此,它需要现有的net.sf.ehcache.CacheManager
。您可以自己创建此缓存管理器的实例,也可以利用现有的工厂bean,即EhCacheManagerFactoryBean
。
我理解它因为名称重叠而令人困惑,但从上面应该清楚哪些类来自哪个库以及它们为何被使用。