All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dexcoder.commons.cache.CacheInterceptor Maven / Gradle / Ivy

//package com.dexcoder.commons.cache;
//
//import java.beans.BeanInfo;
//import java.beans.PropertyDescriptor;
//import java.lang.reflect.Method;
//import java.lang.reflect.Modifier;
//import java.util.ArrayList;
//import java.util.List;
//
//import org.aopalliance.intercept.MethodInterceptor;
//import org.aopalliance.intercept.MethodInvocation;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import com.dexcoder.assistant.cache.DisableCache;
//import com.dexcoder.assistant.cache.EnableCache;
//import com.dexcoder.assistant.pager.Pageable;
//
///**
// * 缓存拦截器
// * 

// * Created by liyd on 9/26/14. // */ //public class CacheInterceptor implements MethodInterceptor { // // /** // * 日志对象 // */ // private static final Logger LOG = LoggerFactory // .getLogger(CacheInterceptor.class); // // /** // * 是否开启自动缓存 // */ // private boolean enableAutoCache = false; // // /** // * 更新数据方法名开始前缀 // */ // private String[] updateMethodNamesBegin = {"insert", "save", "update", "del", "exe"}; // // /** // * 类名固定后缀 // */ // private String classNameFixEnd = "ServiceImpl"; // // public Object invoke(MethodInvocation invocation) throws Throwable { // // Method method = invocation.getMethod(); // // Class returnType = method.getReturnType(); // // // // //没有返回值,不处理直接调用方法 // // if (StringUtils.equals(returnType.getName(), "void")) { // // return invocation.proceed(); // // } // // //被拦截的类 // Class targetClass = invocation.getThis().getClass(); // // DisableCache disableCache = targetClass.getAnnotation(DisableCache.class); // if (disableCache == null) { // disableCache = method.getAnnotation(DisableCache.class); // } // //注解了不处理缓存,直接调用方法 // if (disableCache != null) { // return invocation.proceed(); // } // // EnableCache enableCache = targetClass.getAnnotation(EnableCache.class); // // List entityNames = null; // if (enableCache != null) { // entityNames = new ArrayList(); // Class[] entityClasses = enableCache.value(); // for (Class entityClass : entityClasses) { // entityNames.add(entityClass.getSimpleName()); // } // } else if (enableAutoCache) { // entityNames = new ArrayList(); // entityNames.add(StrUtils.replace(targetClass.getSimpleName(), classNameFixEnd, "")); // } else { // //没有开启缓存,直接调用方法 // return invocation.proceed(); // } // // //被拦截方法 // String targetMethod = invocation.getMethod().getName(); // // //方法参数 // Object[] arguments = invocation.getArguments(); // // Object result = null; // //列表查询 // if (StrUtils.startsWith(targetMethod, "query")) { // // String argsId = this.getArgsUUID(arguments); // String parentCacheKey = entityNames.get(0) + "_query"; // String childCacheKey = parentCacheKey + "_" + argsId; // result = CacheUtils.getChild(parentCacheKey, childCacheKey); // if (result == null) { // result = invocation.proceed(); // CacheUtils.putChild(parentCacheKey, childCacheKey, result); // } // } else if (StrUtils.startsWith(targetMethod, "get")) { // // Long primaryValue = this.getPrimaryValue(arguments); // //返回null,不启用缓存 // if (primaryValue == null) { // result = invocation.proceed(); // } else { // String argsId = this.getArgsUUID(arguments); // String parentCacheKey = entityNames.get(0) + "_get_" + primaryValue; // String childCacheKey = parentCacheKey + "_" + argsId; // result = CacheUtils.getChild(parentCacheKey, childCacheKey); // if (result == null) { // result = invocation.proceed(); // CacheUtils.putChild(parentCacheKey, childCacheKey, result); // } // } // } else { // // result = invocation.proceed(); // // Long primaryValue = null; // for (String updateMethodNameBegin : updateMethodNamesBegin) { // // if (!StrUtils.startsWith(targetMethod, updateMethodNameBegin)) { // continue; // } // primaryValue = this.getPrimaryValue(arguments); // break; // } // // //数据变更,移除缓存 // for (String entityName : entityNames) { // // query缓存 // CacheUtils.remove(entityName + "_query"); // //get缓存 // CacheUtils.remove(entityName + "_get_" + primaryValue); // } // } // // return result; // } // // /** // * 获取参数唯一id // * // * @param arguments // * @return // */ // private String getArgsUUID(Object[] arguments) { // // StringBuilder sb = new StringBuilder(); // if (!ArrUtils.isEmpty(arguments)) { // for (Object arg : arguments) { // String argStr = SerializeUtils.objectToString(arg); // sb.append(argStr).append("#"); // } // } // String uuid = UUIDUtils.getUUID8(sb.toString().getBytes()); // return uuid; // } // // /** // * 获取实体类型主键值 // * // * @param arguments // * @return // */ // private Long getPrimaryValue(Object[] arguments) { // // if (ArrUtils.isEmpty(arguments)) { // return null; // } // Object entityObject = null; // for (Object arg : arguments) { // // if (!(arg instanceof Pageable)) { // continue; // } // entityObject = arg; // break; // } // if (entityObject != null) { // // String entityObjectClassName = entityObject.getClass().getSimpleName(); // if (StrUtils.endsWith(entityObjectClassName, "Vo")) { // entityObjectClassName = StrUtils.substring(entityObjectClassName, 0, // entityObjectClassName.length() - 2); // } // // BeanInfo beanInfo = ClassUtils.getSelfBeanInfo(entityObject.getClass()); // PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); // for (PropertyDescriptor pd : pds) { // // if (!StrUtils.equalsIgnoreCase(entityObjectClassName + "Id", pd.getName())) { // // continue; // } // // Method readMethod = pd.getReadMethod(); // if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { // readMethod.setAccessible(true); // } // try { // Object value = readMethod.invoke(entityObject); // return (Long) value; // } catch (Exception e) { // LOG.error("缓存拦截器获取实体主键值失败", e); // //缓存失败,不影响主业务 // return null; // } // } // } else { // for (Object arg : arguments) { // // if (arg instanceof Long) { // return (Long) arg; // } // } // } // return null; // } // // public void setUpdateMethodNamesBegin(String[] updateMethodNamesBegin) { // this.updateMethodNamesBegin = updateMethodNamesBegin; // } // // public void setClassNameFixEnd(String classNameFixEnd) { // this.classNameFixEnd = classNameFixEnd; // } // // public void setEnableAutoCache(boolean enableAutoCache) { // this.enableAutoCache = enableAutoCache; // } //}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy