浏览 6833 次
锁定老帖子 主题:Spring Module---cache
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-27
改cache采用了aop的方式进行cache的写入和刷出。使用spring风格,上手容易。 系统负载不高,因此对于该缓存方法的性能等等不做评价,目前满足需要。 使用方法: 有这么几个概念需要提前知道1.XXCacheFacade,比如如果是oscache,那么XX就是oscachefacade.该类负责缓存的写入和刷出 <bean id="oscacheFacade" class="org.springmodules.cache.provider.oscache.OsCacheFacade"> <property name="failQuietlyEnabled" value="true"/> <property name="cacheManager"> <bean id="oscacheManager" class="org.springmodules.cache.provider.oscache.OsCacheManagerFactoryBean"/> </property> </bean> 里面的cacheManager必须要有,改类负责提供底层具体的cache实现,比如oscache或者EHcache等。 2.MethodMapCachingInterceptor这个拦截器是官方提供的同类型的拦截器之一,根据方法名,参数匹配拦截。 <bean id="cachingInterceptor001" class="org.springmodules.cache.interceptor.caching.MethodMapCachingInterceptor"> <property name="cacheProviderFacade" ref="oscacheFacade"/> <property name="cachingModels"> <props> <prop key="com.company.jncz.TestItIF.get*">groups=aa;refreshPeriod=10</prop> <prop key="com.company.jncz.TestItIF.load*">groups=bb;refreshPeriod=10</prop> </props> </property> </bean> 注意cachingModels。有两种方式写法,一种是上面看到的使用props另一种是使用Map.在有些情况下只能使用Map方式,下面解释 <map> <entry key="com.company.jncz.TestIt.get*"> <ref local="oscacheCachingModel"/> </entry> </map> <bean id="oscacheCachingModel" class="org.springmodules.cache.provider.oscache.OsCacheCachingModel"> <property name="groups"> <list> <value>aa</value> <value>bb</value> </list> </property> <property name="refreshPeriod" value="10"/> </bean> 尤其当groups(对于oscache来说是groups)的值不止一个的时候,就需要使用map的方式。 否则不生效(也许还有什么我没有注意到).另外需要注意的是对于model来说他的key很重要。有以下需要注意:如果AImpl是A接口的实现类,而且你在其他地方使用时都是用A接口来声明的,那么key就必须写成接口的全限定名比如:com.company.jncz.A.getXX,否则无法识别。 对于与cachingModel相对应的flushingModel写法是类似的,参考api很容易写出来。 最后 <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <value>*Service</value> </property> <property name="interceptorNames"> <list> <value>cachingInterceptor001</value> <value>flushingInterceptor001</value> </list> </property> </bean> <bean id="testService" class="com.company.jncz.TestItStub"/> 这些不做介绍。 总之比较简单。这两天感冒,昏昏沉沉,不知道有没有表达清楚。。。。 自己看了一眼,的确没说清楚,要清楚的几个概念是cacheFacade.CachingModel.FlushingModel.CachingInterceptor.FlushingInterceptor.这些算是比较重要的。其他aop内容略。caching拦截器拦截某方法,根据cachingModel定义的规则由cacheFacade将之放入cache。flushing拦截器拦截到某方法,根据flushingModel定义的规则由cacheFacade将对应的cache清除。嗯,基本上流程就这样子了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-30
我按照上述配置了ehcache,基本成功,但是有个下问题:我想让XX.service包中的所有类的getXXList都使用缓存方案,不知道如何书写?
<property name="cachingModels"> <map> <entry key="get*"> <bean class="org.springmodules.cache.provider.ehcache.EhCacheCachingModel"> <property name="cacheName" value="METHOD_CACHE" /> </bean> </entry> </map> </property> get*是不可以的,异常:'get*' is not a fully qualified name |
|
返回顶楼 | |
发表时间:2007-07-02
getXXXList的意思是?
前三个字母是get,后四个字母是List? 我有一个用ehCache实现的方案,还算比较简单实用,两个拦截器,一个负责create/find cache,另外一个在数据insert/update/delete时候负责update cache(flush),如果有兴趣,我发上代码来大家讨论或则改进一下。 |
|
返回顶楼 | |
发表时间:2007-07-04
ok贴出来大家研究一下.
|
|
返回顶楼 | |
发表时间:2007-07-06
我没有用SpringModule里面的解决方案,更简单一些,在整理了,稍后发上去!
|
|
返回顶楼 | |