1.自定义一个注解
@Target({ElementType.TYPE,ElementType.METHOD}) //注解能标在类上,也能标在方法上
@Retention(RetentionPolicy.RUNTIME) // 运行时有效
@Documented
@Inherited // 可继承,可以有子注解
public @interface CacheData {
}
2.自定义一个切面
@Component
@Aspect //表示这是一个切面
public class CacheAspect {
//@Around("execution(public *[*代表返回值类型] *[切入点所在包](..[参数个数]) )") //连接点表达式
// "@annotation(com.zzq.gmall.common.cache.CacheData)" 表明切入所有加入了此注解的
@Around("@annotation(com.zzq.gmall.common.cache.CacheData)")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
// 环绕通知返回值必须是Object,因为她可以拦截不同返回值的方法
// joinPoint 有标注了此注解的方法的所有信息
// 可以对目标方法做前置处理
Object proceed = joinPoint.proceed(); // 放行目标方法
// 可以对目标方法做后置处理
return proceed;
}
}
文章介绍了如何自定义一个注解`@CacheData`,该注解可以在类或方法上使用,具有运行时保留和可继承的特性。接着,创建了一个名为`CacheAspect`的切面组件,利用`@Around`注解配合注解驱动的方式,找到所有标记了`@CacheData`的方法并进行环绕通知。在环绕通知中,可以进行方法执行前后的处理,如缓存操作。

1万+

被折叠的 条评论
为什么被折叠?



