You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring项目中AspectJ AOP的@Before通知方法未触发是什么原因?

Spring AOP @Before通知未触发的可能原因
  • 切面类未被Spring扫描加载:确认ConcurrencyAspectConfig所在的包是否在AppConfig中@ComponentScan指定的SpringConstants.PACKAGE_SPRING扫描范围内,如果切面类没有被Spring识别为Bean,通知逻辑自然不会生效。
  • 目标类PackingDtoApi不是Spring托管Bean:Spring AOP仅对容器内管理的Bean生效,如果你调用的PackingDtoApi实例是自己通过new关键字创建的,而非从Spring容器中获取,代理逻辑不会生效。
  • 切入点表达式匹配错误:检查execution(public * com.test.wms.service.dto.PackingDtoApi.*(..))的匹配逻辑:
    • 确认com.test.wms.service.dto.PackingDtoApi是目标类的全限定名,无包名、类名拼写错误
    • 可以先简化表达式测试,比如去掉public限制改为execution(* com.test.wms.service.dto.PackingDtoApi.*(..)),排除方法修饰符匹配问题
  • 内部方法自调用触发:如果你是在PackingDtoApi的内部方法A中调用同一个类的方法B,此时是this直接调用,不会走Spring的代理对象,通知不会被拦截触发,这是Spring AOP基于代理实现的固有特性。
  • 代理模式不匹配:如果PackingDtoApi没有实现任何接口,默认的JDK动态代理无法对类生成代理,需要修改@EnableAspectJAutoProxy配置为@EnableAspectJAutoProxy(proxyTargetClass = true),强制使用CGLIB生成类代理。
  • 缺少AspectJ依赖:确认项目依赖中已引入aspectjweaver包,否则Spring无法解析@Aspect相关的切面配置。
  • 切面类注解缺失:虽然@Configuration本身包含@Component语义,部分场景下可以额外给ConcurrencyAspectConfig添加@Component注解,确保被Spring识别为切面Bean。

内容的提问来源于stack exchange,提问作者Tabish Mir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:57:03