我是 Spring AOP 的新手。我确实了解它背后的概念,我也了解@Before 或@After 等用法的概念。我很困惑的仍然是Spring AOP的用法。想想下面的类方法。
public void test(int x) {
:
x++;
logger.info("This is a test" + x);
:
try {
:
} catch (Exception e) {
throw new ...
}
:
}
捕获日志的旧方法如上所示。这是我的问题:
如果我要使用 Spring AOP 实现上述方法,则该记录器将被删除,但 Spring AOP 是否能够捕获此日志消息?(据我所知,Spring AOP 不会查看方法内部)
如果对第 1) 条的回答是肯定的,那么它是如何完成的?
如果答案是否定的,那么使用 Spring AOP 有什么意义。@Before 的使用是没有用的,除非您想在执行方法之前捕获参数等信息。大多数时候,我们想在方法本身中捕获一些日志。
忘记 AspectJ。我确实知道 AspectJ 可以完成上述工作。我只是想知道使用 Spring AOP 的意义是什么,如果它不能完成在方法中捕获日志的最基本的事情。
任何帮助表示赞赏。
进一步说明:
我假设在实现 Spring AOP 之后,上面的代码会是这样的。记录器调用不再在测试方法中,因为它将由方面类处理。这不就是 AOP 的目的吗?消除对象的横切关注(因为它与对象的实际服务无关)并由方面类处理?
public void test() {
:
try {
:
} catch (Exception e) {
throw new ...
}
:
}
如果 Spring AOP 不能做到这一点,那么拥有 AOP 的意义何在?