package cn.org.rapid_framework.cache.aop.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.concurrent.TimeUnit; /** * 用于方法缓存的标注. * * 要使用本标注,需要通过在spring中开启配置. * <p> * <method-cache:annotation-driven method-cache="methodCache" /> * </p> * * <pre> * 示例使用: * * public class UserManager { * ©MethodCache(expireTime=1000) * public void queryBy(String userName,String role) { * } * * ©MethodCache(expireTime=1000,cacheKey="UserManager.queryBy(%s,%s,sex=%s)") * public void queryBy(String userName,String role,String sex) { * } * * ©MethodCache(expireTime=1000,cacheKey="UserManager.queryBy({args})") * public void queryBy(String userName,String role,int sex) { * } * } * </pre> * * @author badqiu */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MethodCache { /** * 过期时间,默认的时间单位为秒 **/ long expireTime(); /** * 存放在cache中的key,支持String.format() 语法. * * <pre> * 示例: * 有一个 UserManager.queryBy(String username,String password); * 1. String.format()格式: @MethodCache(cacheKey="UserManager.queryBy(%s,%s)") * 2. {args}特殊格式: @MethodCache(cacheKey="UserManager.queryBy({args})") {args}代表所有的参数值 * </pre> **/ String cacheKey() default ""; //TODO 增加指定使用具体的cache对象. 如: Cache cache() default NULL; //TODO 增加 CACHE_KEY_PREFIX,用于cache的默认前缀,以区别不同系统 }