| import java.io.Serializable;   import net.sf.ehcache.Cache; import net.sf.ehcache.Element;   import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.beans.factory.InitializingBean;   /**  * 拦截器,用于缓存方法返回结果.  *   * @version $Id: MethodCacheInterceptor.java v 1.0 2004-11-28 14:57:00 Znjq Exp $  * @author <a href="mailto:znjq1980@etang.com">Znjq </a>  */ public class MethodCacheInterceptor implements MethodInterceptor,         InitializingBean {     private Cache cache;       /**      * sets cache name to be used      */     public void setCache(Cache cache) {         this.cache = cache;     }       /*      * (non-Javadoc)      *       * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)      */     public Object invoke(MethodInvocation invocation) throws Throwable {        String targetName = invocation.getThis().getClass().getName();         String methodName = invocation.getMethod().getName();         Object[] arguments = invocation.getArguments();         Object result;           String cacheKey = getCacheKey(targetName, methodName, arguments);         Element element = cache.get(cacheKey);         if (element == null) {             //call target/sub-interceptor             result = invocation.proceed();               //cache method result             element = new Element(cacheKey, (Serializable) result);             cache.put(element);         }         return element.getValue();     }       /**      * creates cache key: targetName.methodName.argument0.argument1...      */     private String getCacheKey(String targetName, String methodName,             Object[] arguments) {         StringBuffer sb = new StringBuffer();         sb.append(targetName).append(".").append(methodName);         if ((arguments != null) && (arguments.length != 0)) {             for (int i = 0; i < arguments.length; i++) {                 sb.append(".").append(arguments[i]);             }         }           return sb.toString();     }       /*      * (non-Javadoc)      *       * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()      */     public void afterPropertiesSet() throws Exception {         // TODO Auto-generated method stub       } } |