spring AOP 实验

               软件151 朱实友

(1)导入所需要的jar包

 Spring的IOC和AOP包

(2)EHCache的配置如下:

<ehcache>  

     <diskStore path="java.io.tmpdir" />  

     <defaultCache maxElementsInMemory="10000" eternal="false"  

         timeToIdleSeconds="2" timeToLiveSeconds="5" overflowToDisk="true"  

         maxElementsOnDisk="10000000" diskPersistent="false"  

         diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />  

     <cache name="testCache" maxElementsInMemory="10000"  

         maxElementsOnDisk="1000" eternal="false" overflowToDisk="false"  

         diskSpoolBufferSizeMB="20" timeToIdleSeconds="60" timeToLiveSeconds="3600"  

        memoryStoreEvictionPolicy="LFU" />  

</ehcache>

 (3)Spring中配置如下:

<?xml version="1.0" encoding="UTF-8"?>  

  <beans xmlns="http://www.springframework.org/schema/beans"  

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  

      <!-- Using a EHCache cache manager -->  

      <bean id="cacheManager"  

     class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  

          <!--EHCache cacheManager   

            <property name="cacheManagerName" value="mainCache"/>  

          -->  

         <property name="configLocation" value="classpath:ehcache.xml" />  

     </bean>  

     <!-- 使用Spring Modules对 EhCache的封装  -->  

     <bean id="cacheProviderFacade" class="<span style="color: #ff0000;">org.springmodules.cache.provider.ehcache.EhCacheFacade</span>">  

         <property name="cacheManager" ref="cacheManager" />  

     </bean>     

     <!-- 配置 方法 拦截器  -->  

     <!-- 缓存拦截器 -->  

     <bean id="cachingInterceptor"  

         class="<span style="color: #ff0000;">org.springmodules.cache.interceptor.caching.MethodMapCachingInterceptor</span>">  

         <property name="cacheProviderFacade" ref="cacheProviderFacade" />  

         <property name="cachingModels">  

          <!-- 进行cache缓存 -->  

             <props>   

                <!-- 所有TicketService对象中,以get开头的方法都将进行缓存 -->  

                 <prop key="com.easyway.ecache.service.TicketService.get*">cacheName=testCache</prop>  

             </props>  

         </property>  

     </bean>    

     <!-- 缓存刷新拦截器 -->  

     <bean id="flushingInterceptor"  

         class="<span style="color: #99cc00;">org.springmodules.cache.interceptor.flush.MethodMapFlushingInterceptor</span>">  

         <property name="cacheProviderFacade" ref="cacheProviderFacade" />  

         <property name="flushingModels">  

         <!-- 进行cache刷新(清除) -->  

             <props>  

                 <prop key="com.easyway.ecache.service.TicketService.set*">cacheNames=testCache</prop>  

             </props>  

         </property>  

     </bean>  

       

     <!-- 相关的服务 -->  

     <bean id="ticketService" class="com.easyway.ecache.service.TicketService"></bean>  

       

     <!-- 配置 基于BeanName规则的动态代理封装 -->  

     <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  

         <!-- 设置拦截的bean名称 -->  

         <property name="beanNames">  

             <list>  

                 <value>ticketService</value>  

             </list>  

         </property>  

         <!-- 设置拦截器的名称 -->  

         <property name="interceptorNames">  

             <list>  

                 <value>cachingInterceptor</value>  

                 <value>flushingInterceptor</value>  

             </list>  

         </property>  

     </bean>  

 </beans>  

(4)编写测试服务类

package com.easyway.ecache.service;    

import java.util.List;  

/**

 * 对其所有的以get* 方式命令的方法,进行缓存处理。当调用set* 命令时,需要其删除缓存

 * @author longgangbai

 *

 */  

@SuppressWarnings("unchecked")  

public class TicketService {     

    /**

     * 需要缓存的集合

     */  

    private List ticketList;  

    /**

     * 需要缓存的服务名称

     */  

    private String serviceName;  

      public String getServiceName() {  

        return serviceName;  

    }  

    public void setServiceName(String serviceName) {  

        this.serviceName = serviceName;  

    }  

    public List getTicketList() {  

        return ticketList;  

    }  

    public void setTicketList(List ticketList) {  

        this.ticketList = ticketList;  

    }  

    /**

     * 修改的服务端名称备注但是不缓存

     * @param serviceName

     */  

    public void changesetServiceName(String serviceName) {  

        this.serviceName = serviceName;  

    }  

}  

(5)测试

package com.easyway.ecache.service;    

import org.springframework.context.ApplicationContext;  

import org.springframework.context.support.ClassPathXmlApplicationContext;  

/**

 * 测试SpringModule EhCache 的整合的应用

 * @author longgangbai

 *

 */  

public class Test {  

public static void main(String[] args) {     

    ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");      

    TicketService  ticketSrv=(TicketService)ctx.getBean("ticketService");    

    String srvName0=ticketSrv.getServiceName();  

    //获取初始化服务端名称  

    System.out.println("srvName0="+srvName0);  

    //设置存储的名称  

    ticketSrv.setServiceName("ticketService");  

    srvName0=ticketSrv.getServiceName();  

    //获取服务端名称  

    System.out.println("srvName1="+srvName0);   

    //修改服务名称但是不缓存  

    ticketSrv.changesetServiceName("serviceName");   

    srvName0=ticketSrv.getServiceName();  

    //获取服务端名称来源自缓存注意观察  

   System.out.println("srvName2="+srvName0);  

   //  

   //srvName0=null  

   //srvName1=ticketService  

   //srvName2=ticketService        

}  

}   

posted on 2017-06-29 12:06  软件151朱实友  阅读(157)  评论(0)    收藏  举报

导航