注: 跟笔者其它研究源码的博客一样, Ehcache系列也是基于一个例子来debug地跟踪, 例子详见
Ehcache(一): Spring + Ehcache开场白
中的附件.如果没有例子作参照,阅读过程中可能有些摸不着头绪.
------------------------------
Ehcache(二): 从EhCacheManagerFactoryBean说起
中,
我们看到一个EhCacheManagerFactoryBean的创建并由此启用一个CacheManager实例.
结合ehcache的配置文件和CacheManager的名字,不难猜出这个实例是管理Cache的.
那么这个CacheManager实例用在了哪?
配置文件中的org.springframework.cache.ehcache.EhCacheFactoryBean实例的创建中.
那么又用这个CacheManager实例做了些什么呢?
这得看EhCacheFactoryBean类的afterPropertiesSet方法.
方法afterPropertiesSet中有这么一段代码:
if (this.cacheManager.cacheExists(this.cacheName)) {
if (logger.isDebugEnabled()) {
logger.debug("Using existing EHCache cache region '" + this.cacheName + "'");
}
this.cache = this.cacheManager.getEhcache(this.cacheName);
}
也就是说, cacheManager会检查下配置的cacheName(即,ehcache.xml文件中名为com.rmn190.MethodCache的cache)对应的cache是否已经存在. 如果存在,就直接get出来.
这只是get了下cacheManager中已有的cache,那么那个已有的cache是怎么创建出来的? 也就是本例中的名为com.rmn190.MethodCache的cache的cache是何时/如何创建的?
一番顺藤模瓜后, 找到了ConfigurationHelper类中的createCache(CacheConfiguration cacheConfiguration)方法. 这里真真切切地看到了"new Cache"的调用.
上面我们深层次地体会到Cache实例的创建并通过cacheManager给get了出来,
get出来后,在Spring中就set给了例子中MethodCacheInterceptor类属性cache. 不过这里又有问题了:
MethodCacheInterceptor类属性cache是一net.sf.ehcache.Cache类型的,
但Spring配置文件中set来的实例是一个
org.springframework.cache.ehcache.EhCacheFactoryBean,类型不匹配
的,EhCacheFactoryBean与Cache有继承或实现关系? 看源码,没有发现. 那Spring又是怎么解决这个类型不匹配问题的?
我们在EhCacheFactoryBean类实现的接口FactoryBean上找到了答案: getObject和getObjectType. 通过FactoryBean接口定义两个方法给出的信息,Spring就很自然而流畅地解决了类型匹配问题.
分享到:
相关推荐
Maven坐标:org.ehcache:ehcache:3.9.9; 标签:ehcache、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.zip)
java ehcache分布式缓存实例 RMI方式实现.
NULL 博文链接:https://rmn190.iteye.com/blog/553761
Ehcache中文指南和实例教程 好东西来的, 入门必备
Ehcache中文指南和实例教程
Cache test = singletonManager.getCache("testCache"); 或者直接创建Cache CacheManager singletonManager = CacheManager.create(); Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2...
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,...
包含ehcache-107-ext.xsd、ehcache-core.xsd、ehcache-multi.xsd 版本为 3.8.1
Maven坐标:org.ehcache:ehcache:3.3.1; 标签:ehcache、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...
cache、ehcache等缓存使用,实现存对象读对象等等
Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.tar.gz)
Spring+EhCache实例源码,本实例的环境 eclipse + maven + spring + ehcache + junit,实例详解请访问博主博客:http://blog.csdn.net/u013142781
搭建ehcache集群的测试实例,包含了普通单机,集群的tcp配置方式,upd方式,20150627完成.
ehcache.xml配置内容 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.ehcache.org/ehcache.xsd"> eternal="false" maxElementsInMemory="1000...
spring3整合EhCache注解实例
Ehcache经典教程实例应用-原创Ehcache经典教程实例应用-原创Ehcache经典教程实例应用-原创
Maven坐标:org.ehcache:ehcache:3.3.1; 标签:ehcache、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
Ehcache 3.x产品线目前是开发产品线。 生成状态: 有关更多信息,您可能需要查看 。 新API入门 有关示例,文档和使用信息,请访问 。 当前的版本 我们于2020年8月25日发布了3.9.0。 包含指向工件和文档的链接,以...
Maven坐标:org.ehcache:ehcache:3.9.9; 标签:ehcache、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...