Annotation实现缓存,Bean指定代码缓存类
package org.frame.base.annotation.support;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import java.util.Set;import org.frame.base.annotation.intercept.ProxyHandler;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;/** * 使用Ehcache代理来实现缓存拦截 * */public class EhCacheBeanPostProcessor implements BeanPostProcessor{private Set<String> beans;public void setBeans(Set<String> beans) {this.beans = beans;}@Overridepublic Object postProcessAfterInitialization(Object target, String beanName)throws BeansException { return target;}/** * will be process the beans define in properties * if you don't want to define * you can define the pach model *DAO * you can define the pach model *Service * you can define the pach model *Action * but i sugguest you define */@Overridepublic Object postProcessBeforeInitialization(Object target, String beanName)throws BeansException {if(beans.contains(beanName)){Class<?>[] interfaceClass = target.getClass().getInterfaces();InvocationHandler handler = new ProxyHandler(target);Object proxyObj = Proxy.newProxyInstance(target.getClass().getClassLoader(),interfaceClass, handler);return proxyObj;}else{return target;}} }
指定代理的类,这样去除缓存很简单,代码不需要更改,只需要从拦截的beans设置里面去掉该beanName,缓存就没了,添加只需要添加该bean定义。