自定义注解 + AOP切面 (切面不生效)
背景
业务开发,需要做一个操作日志,操作日志需要记录某一条数据在操作前后的值的变化记录,并写到操作记录表。
这种情况,使用自定义注解,加个切面,再合适不过了。
于是就开干。
代码部分
- 先写一个切面
@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, 记录一下,。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南