paulwong

          Spring Module---cache

          項(xiàng)目需要緩存,google了一下,發(fā)現(xiàn)spring module有現(xiàn)成的東西可用,隨即拿來看看。發(fā)現(xiàn)還是比較好用的。
          改cache采用了aop的方式進(jìn)行cache的寫入和刷出。使用spring風(fēng)格,上手容易。
          系統(tǒng)負(fù)載不高,因此對(duì)于該緩存方法的性能等等不做評(píng)價(jià),目前滿足需要。
          使用方法:
          有這么幾個(gè)概念需要提前知道1.XXCacheFacade,比如如果是oscache,那么XX就是oscachefacade.該類負(fù)責(zé)緩存的寫入和刷出

          <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必須要有,改類負(fù)責(zé)提供底層具體的cache實(shí)現(xiàn),比如oscache或者EHcache等。
          2.MethodMapCachingInterceptor這個(gè)攔截器是官方提供的同類型的攔截器之一,根據(jù)方法名,參數(shù)匹配攔截。

          <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>  


          尤其當(dāng)groups(對(duì)于oscache來說是groups)的值不止一個(gè)的時(shí)候,就需要使用map的方式。
          否則不生效(也許還有什么我沒有注意到).另外需要注意的是對(duì)于model來說他的key很重要。有以下需要注意:如果AImpl是A接口的實(shí)現(xiàn)類,而且你在其他地方使用時(shí)都是用A接口來聲明的,那么key就必須寫成接口的全限定名比如:com.company.jncz.A.getXX,否則無法識(shí)別。

           

          對(duì)于與cachingModel相對(duì)應(yīng)的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"/>  


          這些不做介紹。
          總之比較簡(jiǎn)單。這兩天感冒,昏昏沉沉,不知道有沒有表達(dá)清楚。。。。

           

          自己看了一眼,的確沒說清楚,要清楚的幾個(gè)概念是cacheFacade.CachingModel.FlushingModel.CachingInterceptor.FlushingInterceptor.這些算是比較重要的。其他aop內(nèi)容略。caching攔截器攔截某方法,根據(jù)cachingModel定義的規(guī)則由cacheFacade將之放入cache。flushing攔截器攔截到某方法,根據(jù)flushingModel定義的規(guī)則由cacheFacade將對(duì)應(yīng)的cache清除。嗯,基本上流程就這樣子了。

          posted on 2007-07-16 17:01 paulwong 閱讀(1400) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE

          主站蜘蛛池模板: 安吉县| 社旗县| 阿瓦提县| 海口市| 山丹县| 邓州市| 叶城县| 涟水县| 博客| 泰顺县| 永川市| 彭州市| 察雅县| 永新县| 牡丹江市| 托克逊县| 顺义区| 孟州市| 桦甸市| 洪洞县| 理塘县| 宁都县| 洛川县| 柳河县| 南丹县| 梁山县| 高邑县| 都昌县| 宣威市| 广河县| 巨野县| 广安市| 青河县| 忻城县| 凤庆县| 宝兴县| 岳池县| 新丰县| 慈利县| 宜昌市| 天台县|