使用EhCache首先需要配置缓存信息ehcatch.xml,然后需要Spring配置,将EhCache与SpringBoot整合在一起,这其中就要装配两个重要的bean[EhCacheManagerFactoryBean]和[EhCacheManager]
- 首先从EhCacheManagerFactoryBean来讲:这个类就是Spring用来创建 CacheManager实例的,CacheManager负责管理一个或多个Cache对象。(afterPropertiesSet方法来返回一个CacheManager实例对象)
EhCacheManagerFactoryBean封装的数据:
acceptExisting设置是否为此EhCacheManagerFactoryBean设置接受现有的同名EhCache CacheManager。默认为“false”。与shared组合使用 ,"acceptExisting"和"
acceptExisting"
如果两者都设置,则acceptExisting将被覆盖,因为shared表示“更强”的共享模式。
其中有三个重要的属性:
/**econfigLocation配置信息*/
@Nullable
private Resource configLocation;
/**通过shared来设置cache的基地是这里的Spring独用,还是跟别的(如hibernate的Ehcache共享)
* whether the EHCache CacheManager should be shared (as a singleton at the VM level)
* or independent (typically local within the application)*/
private boolean shared = false;
/**通过EhCacheManagerFactoryBean来创建CacheManager实例*/
@Nullable
private CacheManager cacheManager;
可以看到,在afterPropertiesSet()中这样一段代码:据shared与否的设置,Spring分别通过CacheManager.create()或new CacheManager()方式来创建一个ehcache基地.。
if (this.shared) {
this.cacheManager = CacheManager.create(configuration);
} else if (this.acceptExisting) {
Class var2 = CacheManager.class;
synchronized(CacheManager.class) {
this.cacheManager = CacheManager.getCacheManager(this.cacheManagerName);
if (this.cacheManager == null) {
this.cacheManager = new CacheManager(configuration);
} else {
this.locallyManaged = false;
}
}
} else {
this.cacheManager = new CacheManager(configuration);
}
至此,EhCacheManagerFactoryBean的任务就完成了。在afterPropertiesSet()方法中,是通过调用CacheManager 类提供的static创建方法来获得 CacheManager 对象。
关于afterPropertiesSet()的执行顺序可参考链接afterPropertiesSet方法什么时候执行Spring中的InitializingBean接口的使用