Java EE 中的 Interceptors 是什么?

2022-08-31 17:35:10

我试图澄清我对Java EE中拦截器的概念。我已经阅读了Java EE规范,但我对它有点困惑。请为我提供一些有用的链接或教程,可以清除我的概念。如何,何时,为什么我们使用拦截器?


答案 1

拦截器用于从业务逻辑实现横切关注点,例如日志记录、审核和安全性。

在 Java EE 5 中,只允许在 EJB 上使用拦截器。在Java EE 6中,Interceptors成为它自己的新规范,在更高的层次上抽象,以便它可以更通用地应用于平台中更广泛的规范集。

它们拦截关联目标类上的调用和生命周期事件。基本上,拦截器是一个类,当调用目标类上的业务方法、生命周期事件(如创建/销毁 Bean 的方法)或发生 EJB 超时方法时,将调用其方法。CDI 规范定义了一种类型安全机制,用于使用拦截器绑定将拦截器与 Bean 相关联。

在以下位置查找工作代码示例:

https://github.com/arun-gupta/javaee7-samples/tree/master/cdi/interceptors

Java EE 7还在Java Transaction API中引入了一个新的@Transactional注释。这允许您在 EJB 外部拥有容器管理的事务。此注释被定义为拦截器绑定,并由 Java EE 运行时实现。@Transactional的工作示例位于:

https://github.com/arun-gupta/javaee7-samples/tree/master/jta/transaction-scope


答案 2

拦截器用于向受管 Bean 添加 AOP 功能

我们可以使用@Interceptor注释将 Interceptor 附加到我们的类。每当调用我们类中的方法时,附加的拦截器将拦截该方法调用并执行其拦截器方法。

这可以使用@AroundInvoke注释来实现(请参阅下面的示例)。

Method Interceptors

我们可以使用@AroundConstruct注释来拦截类的生命周期事件(对象创建,销毁等)。

Interceptor和Servlet Filters之间的主要区别在于我们可以在WebContext之外使用Interceptor,但是过滤器是特定于Web应用程序的。

拦截器的常见用途是日志记录、审核和分析。

有关更详细的介绍,您可以阅读本文。https://abhirockzz.wordpress.com/2015/01/03/java-ee-interceptors/


推荐