标签:core type meta product caching 分享 dom 接口 org
1 <config 2 xmlns:xsi=‘http://www.w3.org/2001/XMLSchema-instance‘ 3 xmlns=‘http://www.ehcache.org/v3‘ 4 xsi:schemaLocation=" 5 http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd"> 6 7 <cache alias="ready-cache"> 8 <key-type>java.lang.Long</key-type> 9 <value-type>com.pany.domain.Product</value-type> 10 <loader-writer> 11 <class>com.pany.ehcache.integration.ProductCacheLoaderWriter</class> 12 </loader-writer> 13 <heap unit="entries">100</heap> 14 </cache> 15 16 </config>
ehcache的jcache api
1 //如果依赖中有多个jcache实现,这里可以指定ehcache实现Caching.getCachingProvider(“org.ehcache.jsr107.EhcacheCachingProvider”);,如果只有一个jcache实现,则Caching.getCachingProvider()可以找到对应的实现,查找逻辑后面有提到 2 CachingProvider cachingProvider = Caching.getCachingProvider(); 3 //getCacheManager第一个参数为一个uri,对于ehcache来说该uri应该是ehcache的配置文件,ehcache实现在这里就会初始化配置文件中的cache 4 CacheManager manager = cachingProvider.getCacheManager( 5 getClass().getResource("/org/ehcache/docs/ehcache-jsr107-config.xml").toURI(), 6 getClass().getClassLoader()); 7 //从manager获得已配置的cache 8 Cache<Long, Product> readyCache = manager.getCache("ready-cache", Long.class, Product.class);
下面就来看一下ehcache是如何适配jcache的。
getCachingProvider:
打开该文件,发现ehcache的cachingProvider实现类的全限定名:
总结一下,Caching.getCachingProvider会去找特定的配置文件META-INF/services/javax.cache.spi.CachingProvider,特定的实现会在该文件内写入CachingProvider实现类的全限定名,Caching.getCachingProvider得到类名后就可以加载该类,最终返回特定实现的CachingProvider,如EhcacheCachingProvider,再之后就是Ehcache的事了。
为什么要有CachingProvider呢?jcache直接提供CacheManager的api不行吗?我觉得是可以的,只不过没有了CachingProvider就没有了对CacheManager的统一管理,我们来看CachingProvider接口,它提供了get(获取CacheManager)、close(关闭CacheManager)的方法,这样我们就可以对CacheManager统一管理。
标签:core type meta product caching 分享 dom 接口 org
原文地址:http://www.cnblogs.com/holoyong/p/7263140.html