方法上的自定义注解明明写了,切面日志一条都没有,切点表达式检查了几遍没错,重启多次依旧不生效。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AuditLog {}
@Retention 默认就是 CLASS,运行期反射读不到注解,切点扫描结果为空,切面注册成功但永远不命中。这一点先确认清楚,后面就不用反复试。
「注解保留策略」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
具体做法是,注解上加 @Retention(RUNTIME);确认切点用 @annotation 指向该注解;重启后看切面日志有没有输出。
改完照着核一遍,调用带注解的方法后,切面里的记录能稳定打印出来。
