81,094
社区成员
发帖
与我相关
我的任务
分享
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<value>classpath:ehcache.xml</value>
</property>
</bean>
<bean id="user_cache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager">
<ref bean="cacheManager"/>
</property>
<property name="cacheName">
<value>user_cache</value>
</property>
</bean>
<bean id="myInterceptor" class="com.interceptor.MyInterceptor">
<property name="cache">
<ref bean="user_cache"/>
</property>
</bean>
<bean id="methodCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="myInterceptor"/>
</property>
<property name="patterns">
<list>
<value>.*find.*</value>
</list>
</property>
</bean>
<bean id="testBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref bean="test"/>
</property>
<property name="interceptorNames">
<list>
<value>methodCachePointCut</value>
</list>
</property>
</bean>
<bean id="test" class="com.interceptor.Test"/>
public class MyInterceptor implements MethodInterceptor {
private Cache cache;
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("----------进入拦截器----------");
String targetName = invocation.getThis().getClass().getName();
String methodName = invocation.getMethod().getName();
Object []arguments = invocation.getArguments();
Object result;
String cacheKey = this.getCacheKey(targetName, methodName, arguments);
Element element = cache.get(cacheKey);
System.out.println(cacheKey);
System.out.println(element);
if (null == element) {
result = invocation.proceed();
element = new Element(cacheKey,(Serializable)result);
cache.put(element);
}
System.out.println("----------退出拦截器----------");
return element.getValue();
}
private String getCacheKey(String targetName,String methodName,Object[] arguments) {
StringBuilder result = new StringBuilder();
result.append(targetName).append(".").append(methodName);
if (null != arguments && 0 != arguments.length) {
for (int i = 0; i < arguments.length; i++) {
result.append(".").append(arguments[i]);
}
}
return result.toString();
};
public Cache getCache() {
return cache;
}
public void setCache(Cache cache) {
this.cache = cache;
}
}
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"/>
<cache name="user_cache"
maxElementsInMemory="10000"
eternal="true"
overflowToDisk="true"/>
</ehcache>