一、切面类上没有添加Component注解
@Component
@Aspect
public class AopTest {
如上代码,因为Spring AOP是交由Spring 容器去管理,所以没有加上Component之后,容器就无法帮我们自动代理。
总结,一切交由Spring容器管理的都需要显示声明Component或则别的注解。当我们,无法确定该注解是否包含Component时,可以使用按住alt+鼠标点击注解 就能访问该注解的组成。
如下图,点击@Aspect,里面并没有声明Component
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Aspect {
String value() default "";
}
如下图,当我们打开@Configuration时,就包括了Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
boolean proxyBeanMethods() default true;
}
二、没有给切面中的方法没有加上参数
如下代码,如果我们代理的那个方法有参数时,我们也必须加上参数,否则会代理不成功。
@Pointcut("execution(void a.b.websocket.WebApplication.save(*))")
private void pt1(){}
如下图,就是没有加上参数的代理
@Pointcut("execution(void a.b.websocket.WebApplication.save())")
private void pt1(){}
三、Spring Test中,并不会让AOP 失效
如果你怀疑时Spring Test导致AOP失效,那你就错了,换一个方向找错误说不定更好。希望以上想法对你们有帮助。