<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    借助Spring Module項目,如何配置聲明式緩存功能實現(xiàn)

     前言:
    本文檔將講解一下,如何借助Spring Module項目,實現(xiàn)配置聲明性緩存功能。
    說明:
    本檔的配置經(jīng)過本人測試,都能正確運行。
    運行環(huán)境: Jdk5.0, Spring-2.5, Spring-modules-0.9, ehcache-1.6.0-beta4.jar

    首先創(chuàng)建一個StudentService服務(wù)類,本文將對其所有的以get* 方式命令的方法,進行緩存處理。當調(diào)用set* 命令時,需要其刪除緩存
    以更做數(shù)據(jù)的更新。
    源代碼如下:

    1 public class StudentService {
     
    2 
     
    3     private String name = "matthew";
     
    4     
     
    5     public String getName() {
     
    6         return name;
     
    7     }

     
    8     
     
    9     public String getName(String salution) {
    10         return salution + " " + name;
    11     }

    12     
    13     public void setName(String name) {
    14         this.name = name;
    15     }

    16     
    17     public void changeNameAndNotTellCache(String name) {
    18         this.name = name;
    19     }

    20 }


    接下來,就是編寫Spring配置文件 context.xml,以實現(xiàn)根據(jù)上面的要求,進行聲明性緩存功能的配置
    Spring的配置內(nèi)容如下:(已加上注釋)

    <?xml version="1.0" encoding="UTF-8"?>
     2 
    <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation
    ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
     5 
     6     
    <!-- Using a EHCache cache manager -->
     7     
    <bean id="cacheManager"
     8         class
    ="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
     9         
    <!--<property name="cacheManagerName" value="mainCache"/>-->
    10         
    <property name="configLocation" value="classpath:ehcache.xml" />
    11     
    </bean>
    12 
    13     
    <!-- 使用Spring Modules對 EhCache的封裝  -->
    14     
    <bean id="cacheProviderFacade" class="org.springmodules.cache.provider.ehcache.EhCacheFacade">
    15         
    <property name="cacheManager" ref="cacheManager" />
    16     
    </bean>
    17     
    18     
    <!-- 配置 方法 攔截器  -->
    19     
    <!-- 緩存攔截器 -->
    20     
    <bean id="cachingInterceptor"
    21         class
    ="org.springmodules.cache.interceptor.caching.MethodMapCachingInterceptor">
    22         
    <property name="cacheProviderFacade" ref="cacheProviderFacade" />
    23         
    <property name="cachingModels"> <!-- 進行cache緩存 -->
    24             
    <props> <!-- 所有StudentService對象中,以get開頭的方法都將進行緩存 -->
    25                 
    <prop key="StudentService.get*">cacheName=testCache</prop>
    26             
    </props>
    27         
    </property>
    28     
    </bean>
    29     
    30     
    <!-- 緩存刷新攔截器 -->
    31     
    <bean id="flushingInterceptor"
    32         class
    ="org.springmodules.cache.interceptor.flush.MethodMapFlushingInterceptor">
    33         
    <property name="cacheProviderFacade" ref="cacheProviderFacade" />
    34         
    <property name="flushingModels"><!-- 進行cache刷新(清除) -->
    35             
    <props>
    36                 
    <prop key="StudentService.set*">cacheNames=testCache</prop>
    37             
    </props>
    38         
    </property>
    39     
    </bean>
    40     
    41     
    <!-- 配置 基于BeanName規(guī)則的動態(tài)代理封裝 -->
    42     
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    43         
    <property name="beanNames">
    44             
    <list>
    45                 
    <value>studentService</value>
    46             
    </list>
    47         
    </property>
    48         
    <property name="interceptorNames">
    49             
    <list>
    50                 
    <value>cachingInterceptor</value>
    51                 
    <value>flushingInterceptor</value>
    52             
    </list>
    53         
    </property>
    54     
    </bean>
    55 
    56     
    <bean id="studentService" class="StudentService"></bean>
    57 
    </beans>


    接下來,為能讓EhCache能正常工作,還得編寫EhCache配置文件 ehcache.xml, 內(nèi)容如下:

     1 <ehcache>
     2     
    <diskStore path="java.io.tmpdir" />
     3     
    <defaultCache maxElementsInMemory="10000" eternal="false"
     4         timeToIdleSeconds
    ="2" timeToLiveSeconds="5" overflowToDisk="true"
     5         maxElementsOnDisk
    ="10000000" diskPersistent="false"
     6         diskExpiryThreadIntervalSeconds
    ="120" memoryStoreEvictionPolicy="LRU" />
     7     
    <cache name="testCache" maxElementsInMemory="10000"
     8         maxElementsOnDisk
    ="1000" eternal="false" overflowToDisk="false"
     9         diskSpoolBufferSizeMB
    ="20" timeToIdleSeconds="60" timeToLiveSeconds="3600"
    10         memoryStoreEvictionPolicy
    ="LFU" />
    11 
    </ehcache>


    下面將要測試配置是否能正確工作,編寫一個測試類 Test.java內(nèi)容如下:

    1 public class Test {
     
    2 
     
    3     /**
     4      * 
    @param args
     5      
    */

     
    6     public static void main(String[] args) {
     
    7         AbstractApplicationContext context;
     
    8         context = new ClassPathXmlApplicationContext("classpath*:context.xml");
     
    9         context.start();
    10         
    11         StudentService ss = (StudentService) context.getBean("studentService");
    12 
    13         String name;
    14         System.out.println("第一次訪問,沒有緩存");
    15         name = ss.getName();
    16         System.out.println(name);
    17         name = ss.getName("Mr");
    18         System.out.println(name);
    19         
    20         //use change not changed value
    21         System.out.println("第二次訪問,使用緩存");
    22         ss.changeNameAndNotTellCache("Michael");
    23         name = ss.getName();
    24         System.out.println(name);
    25         
    26         name = ss.getName("Mr");
    27         System.out.println(name);
    28         
    29         //update cache
    30         System.out.println("清除緩存后,再次訪問 ");
    31         ss.setName("Michael");
    32         name = ss.getName();
    33         System.out.println(name);
    34         
    35         name = ss.getName("Mr");
    36         System.out.println(name);
    37         
    38         context.close();
    39     }

    40 
    41 }


    運行后的輸出結(jié)果:

    第一次訪問,沒有緩存
    matthew
    Mr matthew
    第二次訪問,使用緩存
    matthew
    Mr matthew
    清除緩存后,再次訪問 
    Michael
    Mr Michael

    從輸出的結(jié)果上來看,緩存的功能已經(jīng)正確啟效。
    本文只是一個簡單的示例,希望對大家有借鑒作用。
    更多的資料,詳見官方文檔 https://springmodules.dev.java.net/.

    http://www.tkk7.com/xmatthew/archive/2010/04/22/319146.html

    posted on 2010-04-23 09:47 paulwong 閱讀(833) 評論(0)  編輯  收藏 所屬分類: SPRING

    主站蜘蛛池模板: 亚洲色在线无码国产精品不卡| 亚洲大码熟女在线观看| 啦啦啦中文在线观看电视剧免费版 | 中国一级特黄的片子免费 | 亚洲欧洲∨国产一区二区三区 | 精品多毛少妇人妻AV免费久久 | 国产亚洲真人做受在线观看| 成年女人毛片免费观看97| 不卡视频免费在线观看| 国产在线精品一区免费香蕉| 亚洲精品无码久久久久APP| 久久亚洲精精品中文字幕| 亚洲AV无码一区二区三区在线观看| 99ee6热久久免费精品6| 特级毛片免费播放| 国产精品高清视亚洲精品| 亚洲av永久无码精品表情包| 国产成人免费手机在线观看视频 | 亚洲 欧洲 自拍 另类 校园| 亚洲人成亚洲精品| 亚洲免费观看视频| 亚洲v高清理论电影| 亚洲综合av永久无码精品一区二区 | 一级做a免费视频观看网站| 亚洲人成网站色在线观看| 亚洲色丰满少妇高潮18p| 美国免费高清一级毛片| 在线综合亚洲欧洲综合网站| 在线观看国产一区亚洲bd| 亚洲中文字幕久久久一区| 国产成人亚洲毛片| 国产一级一毛免费黄片| 69视频免费观看l| 久久综合给合久久国产免费| 青娱乐免费在线视频| 一区二区免费视频| 国内精品一级毛片免费看| 中文字幕的电影免费网站| 免费不卡在线观看AV| 好吊妞998视频免费观看在线| 一个人看的www在线观看免费|