【发布时间】:2012-06-12 22:42:55
【问题描述】:
我真的开始关注 AOP,并且非常喜欢抽象出横切关注点并将其从我的核心业务代码中删除的想法。到目前为止,我一直在阅读 AOP Alliance(我认为这是 Guice 和 Spring AOP 的主力)和 AspectJ。
不幸的是,当我们谈论比简单的方法拦截更高级的东西时,很难找到好的、有效的 Java AOP 代码示例。我一遍又一遍地阅读如何使用 AOP 实现主要的 Java EE 概念,例如持久性、事务处理和消息传递,但在我的一生中,我找不到任何这样的例子!
归根结底,AOP 归根结底就是方法拦截(除非我在这里遗漏了主要的东西)。所以如果是这样的话,并且给定方法拦截器的一般形式:
// Using AOP Alliance for this example
public class MyInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation inv) {
// Run this code before executing inv.
preInvocation();
Object result = inv.proceed();
// Run this code after executing inv.
postInvocation();
}
// ...
}
鉴于此,有人可以提供具体代码示例,说明如何通过方法拦截将这些 Java EE 概念中的每一个委托给 AOP:
- 持久性/ORM
- 事务处理
- 消息传递
我想我只是很难连接所有的点并通过“树木”看到“森林”。提前致谢!
【问题讨论】:
-
虽然 AOP 一开始可能令人兴奋,但请注意代码中“自动”的后果...没有那么坚固的把手。像所有事物一样,适度是很棒的。
-
我真的建议为此使用注释,而不是纯粹的代码外 AOP 编织,它更容易遵循。对此有任何兴趣,或者您是否真的在寻找具有事务信息的线程局部变量存在的示例?我不确定 AOP 会在消息传递中添加什么,您在寻找什么?
-
我是brand AOP 新手,我正在尝试查看我在reading about 中工作的代码示例。是的,出于几个原因,我绝对希望最终使用注释(方法拦截)而不是字节码编织。我正在寻找的是一个可用于持久性或消息传递的 AOP 方法拦截器的示例(这意味着,当一个方法执行时,它被拦截并且某种持久性或面向消息传递的代码作为它的建议执行)。
标签: java transactions persistence aop message