java “第二级”调用方法上的注解将不会触发方面[重复]

csbfibhn  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(109)
    • 此问题在此处已有答案**:

Why does self-invocation not work for Spring proxies (e.g. with AOP)?(2个答案)
Spring AOP not working for method call inside another method(16个答案)
5小时前关门了。
我正在使用Spring AOP创建一个注解,用于一些横切的目的,下面是示例:

@Aspect
@Component
@Slf4j
public class MyAspect {
   
    @Before("@annotation(MyAnnotationCheck)")
    @SneakyThrows
    public void check(JoinPoint joinPoint) {
        
        ......
    }
}

然而,当我在被另一个methodA调用的方法methodB上使用注解时,这个方面没有被触发。注意methodA和methodB都在同一个服务类OperationService.java中。这个类将被自动连接并在其他类中使用(如控制器)。

public void methodA(MyRequest request) {
    .......
    methodB(request);
}

@MyAnnotationCheck(checkType = "abc")
public void methodB(MyRequest request) {
    EntityA objA = myService.loadFromDB();  // Reload the object from DB
}

如果我用直接把注解放在方法A上进行测试?它看起来工作得很好。这是预期的吗?为什么?

n9vozmp4

n9vozmp41#

是的,这是意料之中的,因为无论何时在methodA上添加注解()则它工作正常,此时您调用methodB()来自方法A(),那么它将被自动调用。因为你使用了@Before注解,所以AOP类方法将在methodA之前被调用在这个场景中调用了()。您不需要在那里放置注解,你只需要当你想要特定的方法独立工作时才需要。2你从不同的方法调用,那么你可以把第一个方法作为方面引用,然后调用第二个方法。

相关问题