背景
业务开发,需要做一个操作日志,操作日志需要记录某一条数据在操作前后的值的变化记录,并写到操作记录表。
这种情况,使用自定义注解,加个切面,再合适不过了。
于是就开干。
代码部分
- 先写一个切面
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WorkersLog {
}
- 定义切面
@Aspect
@Component
@Slf4j
public class WorkersLogAspect {
@Pointcut("@within(com.aaacarrot.demo.WorkersLog)")
public void save() {
}
@Around("save()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
// 业务代码 省略
}
}
问题
代码写好了,看起来也没啥问题,
但是!!
运行的时候,这个切面方法总是进不来。
为什么呢,
想来想去,也就只有一种可能了,这个切点写得不对。。
对比了一下之前的一种写法,发现了端倪:
把这个改一下就行了!!!
把 @within 改成 @annotation 就好了! emmmm,,,,,总的来说,对这个pointcut的使用不熟悉导致这次的问题。。
@Pointcut("@annotation(com.aaacarrot.demo.WorkersLog)")
public void save() {
}
因为对切面参数不熟悉,导致的一次浪费时间的bug, 记录一下,。。
标签:自定义,WorkersLog,切面,AOP,注解,save,public From: https://www.cnblogs.com/aaacarrot/p/17013510.html