【发布时间】:2013-03-17 20:09:22
【问题描述】:
我是 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 的意义何在?
【问题讨论】:
-
你有没有想过这个问题?
标签: spring spring-aop