AOP + SpEL 自定义注解实现自动缓存机制
✨背景
在实际开发中,我们经常会给某些接口加缓存,来避免重复查询数据库,提高系统性能。Spring 自带的 @Cacheable
虽然功能强大,但在灵活性上有一定限制,比如:
-
想要自定义缓存 key 生成逻辑?
-
想按参数任意字段组合缓存 key?
-
想自由设置缓存时间?
-
想要缓存所有接口结果(甚至自定义统一返回结构)?
于是,我基于 AOP + Redis + SpEL 表达式,自定义了一个 @CustomCache
注解,完美解决这些问题。
🧩功能亮点
-
✅ 支持 SpEL 表达式动态生成缓存 key;
-
✅ 支持基于参数内容自动构造缓存 key;
-
✅ 支持缓存时间控制;
-
✅ 支持缓存数据反序列化为方法真实返回值类型(包括泛型);
📦注解定义
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface CustomCache { String key() default ""; // 支持 SpEL 表达式 int expire() default 60; // 缓存有效期,单位秒 }