- 此问题在此处已有答案**:
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上进行测试?它看起来工作得很好。这是预期的吗?为什么?
1条答案
按热度按时间n9vozmp41#
是的,这是意料之中的,因为无论何时在methodA上添加注解()则它工作正常,此时您调用methodB()来自方法A(),那么它将被自动调用。因为你使用了@Before注解,所以AOP类方法将在methodA之前被调用在这个场景中调用了()。您不需要在那里放置注解,你只需要当你想要特定的方法独立工作时才需要。2你从不同的方法调用,那么你可以把第一个方法作为方面引用,然后调用第二个方法。