最近在把之前研究JFinal源码的心得,细化下。
EhCache这块有个疑惑。
JFinal EhCache使用
JFinalClubConfig extends JFinalConfig{
public void configPlugin(Plugins me) {
// ActiveRecordPlugin中的ICache是固定的EhCache
DruidPlugin druidPlugin = getDruidPlugin();
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
me.add(new EhCachePlugin());
}
}
配置EhCachePlugin插件之后,
public boolean start() {
createCacheManager();
CacheKit.init(cacheManager);
return true;
}
CacheKit主要提供静态工具方法,可以理解为 “全局变量”,EhCachePlugin负责向里面写,其它地方从这里获取,然后使用。
/**
* 优先从缓存中获取 account 对象,可获取到被 block 的 account
*/
public Account getById(int accountId) {
// 优先从缓存中取,未命中缓存则从数据库取
Account account = CacheKit.get(allAccountsCacheName, accountId);
return account;
}
问题1:
缓存,可以有插件。
但是“缓存”这个概念,不应该是全局的么,比如 包的路径可以为
com.jfinal.cache。
CacheManager管理,按说也是全局的。
但实际上是 用的是ehcache 具体的实现类。
问题2:
activerecord插件,Config为啥直接使用写死的EhCache。
Config(String name, DataSource dataSource, int transactionLevel) {
init(name, dataSource, new MysqlDialect(), false, false, transactionLevel, IContainerFactory.defaultContainerFactory, new EhCache());
}
“EhCache”为啥放在activerecord的子包里,而非全局的包,比如jfinal.cache.echache。
缓存的定义不应该是全局且通用的吗?
开发者自己的业务代码,JFinal框架内部的缓存。
让开发者自己指定实现。
换句话说,咱们的EhCachePlugin其实和JFinal框架绑定的比较紧。
不知道说清没。