注解不生效之自调用

注解不生效之自调用

1、自调用解释

自调用是指在一个类的方法中,直接调用该类的另一个被切面标记的方法,而不是通过 Spring 容器来调用

@Component
public class MyService {
    public void methodA() {
        // 直接调用本类的另一个方法 methodB
        methodB(); 
    }

    @Transactional // 假设这里是一个切面标记,如事务切面
    public void methodB() {
        // 业务逻辑
    }
}

在上述代码中,methodA 直接调用了 methodB,这就是自调用
methodA 方法内部使用 this.methodB() 来调用 methodB 方法,这里的 this 关键字代表当前对象的引用

2、自调用导致切面不生效的原因

在这个 Spring 服务类中,当 methodA 调用 methodB 时,如果 methodB 上定义了切面(如 @Before、@After 等),由于 methodA 中使用 this.methodB() 调用,切面不会被触发。因为 Spring AOP 是通过动态代理实现的,从外部调用时会调用代理对象的方法,而自调用绕过了代理对象,直接调用原对象的方法

你可能感兴趣的:(Java,记录,spring,java)