记录几个SpringBoot切面未生效的原因:
1. 目标类未进入Spring生命周期
切面AOP是在Bean创建后面beanPostProcessor的后置方法里实现。所以目标类必须是由Spring容器管理的。
也就是说目标类不能是直接new出来的,可以使用@Resource
或@Autowired
注入。
2. 切面类未定义为bean
切面类除了@Aspect
,还需要额外加@component
确保切面类也在Spring容器管理中。
3. 切面类未成功加载
需要检查配置扫描路径是否包含到了切点类和切面类。检查@ComponentScan
注解的basePackages
属性配置是否包含切点类和切面类。
4. 切点定义错误
- 需要注意切点不能是
private
修饰的方法。 - 检查切入点表达式:
execution([权限修饰符] [返回值类型] [简单类名/全类名] [方法名]([参数列表]))