引言
我们知道Spring自动装配会自动完成对象间依赖关系的注入,如果被注入的依赖使用了AOP,那么在依赖注入时,注入的是代理对象.
AOP是一种编程思想,Spring中通过定义一组规则(pointcut切点表达式),然后在所有满足规则的地方(joinpoint连接点)执行特定方法(advice通知),Spring中通过代理来实现AOP.通知的执行就可以看成代理对象在执行原对象逻辑前的补充和增强动作.
失效场景一:
调用者不是代理类,没法执行增强逻辑(注解对应的行为),导致注解失效.
举个开发中的例子:
// 1.定义接口
public interface SpringDemo {
void insert();
void delete();
}
// 2.实现接口逻辑
public class SpringDemoImpl implements SpringDemo {
@Override
public void insert() {
System.out.println("执行insert....");
// delete方法上的注解不生效
//因为调用delete的不是代理类,所以代理类中delete的增强逻辑(注解行为)不会执行,即注解失效
delete();
}
@Override
public void delete() {
System.out.println("执行delete...");
}
}