Java EE 中的拦截器简介
在本文中,我们将介绍 Java EE 中的拦截器。 它包括拦截器方法、拦截器类和生命周期回调拦截器。
Java EE 中的拦截器简介
在 Java EE 版本 5 中,我们只能在 Enterprise JavaBeans (EJB) 上使用拦截器。 虽然 Java EE 版本 6 带来了新的规范,但我们可以更通用地应用它,因为它是在更高级别上抽象的。
Java EE 版本 7 引入了 @Transactional 注释,允许在 Enterprise JavaBeans 之外进行容器管理的事务。 它被定义为拦截器绑定并由 Java EE 运行时实现。
拦截器是在目标上调用业务方法时调用其方法的类。 例如,发生诸如销毁或创建 bean 的方法之类的生命周期事件。
我们使用拦截器来实现横切关注点。 例如,业务逻辑的安全性、审计和日志记录。
我们可以将拦截器定义为类拦截器或方法拦截器,首选的方法是使用元数据注释来定义拦截器。 我们还可以在应用程序描述符中定义它们,但它们不能跨 Java EE 服务器移植。
Java 中的 javax.interceptor 包
元数据注释位于 javax.interceptor 包中。 元数据注释的一些示例是 @AroundTimeout
和 @AroundInvoke
。
javax.interceptor 包包含我们用来定义拦截器类和方法的所有接口和注释,也用于将拦截器类绑定到目标类。 拦截器的功能在 Java 拦截器规范中定义。
拦截器规范定义了两种拦截点:生命周期回调拦截和业务方法拦截。 上下文和依赖注入 (CDI) 改进了此功能,并通过将拦截器绑定到 bean 的语义和基于注释的方法进行了改进。
Java中的拦截器方法
它是目标类或拦截器类的方法。 用于干预目标类方法的调用,以及目标类的构造函数和生命周期事件等。
对于目标类,我们可以在目标类、拦截器类、或者拦截器类或目标类的超类中声明拦截器方法。 aroundConstruct 是我们可以在拦截器类或其超类中定义的唯一方法。
aroundInvoke、AroundTimeout、PostConstruct 和 PreDestroy 也是拦截器方法。 而PostConstruct、AroundConstruct和PreDestroy统称为生命周期回调拦截器方法。
拦截器类
拦截器类与目标类不同。 拦截器类的方法响应于对目标类的调用而调用,并且目标类可以与任意数量的拦截器类相关联。
请记住,拦截器类必须包含一个不带参数的公共构造函数。 对于类,我们使用元数据注解来定义拦截器类和方法,也可以使用部署描述符来定义拦截器类/方法。
拦截器类按照 javax.interceptor.Interceptors 注释中定义的顺序进行调用。 请记住,此顺序不是固定的,部署描述符可以覆盖它。
拦截器生命周期
拦截器类的生命周期与其关联的目标类相同。 当我们实例化目标类时,拦截器类也会被实例化,并且我们对目标类中声明的每个拦截器类都进行实例化。
我们在调用 @PostConstruct
回调之前实例化所有拦截器和目标类。 此外,在调用 @PreDestroy
回调之前销毁拦截器目标类的实例。
Java中拦截器方法和拦截器类的使用
我们只需要将它们放在我们的方法周围,如下所示即可使用拦截器方法。 我们称其为intercept方法拦截器。
@AroundTimeout
public void timeoutInterceptorMethod (InvocationContext ctx) { ... }
...
对于拦截器类,我们添加拦截器注释。 将它们放入我们的拦截器类中。
请参阅以下示例。
例子:
@Stateless
public class OrderBean{
...
@Interceptors(OrderInterceptor.class)
public void placeOrder (Order order){...}
...
}
你可以检查这个来详细探索拦截器。
相关文章
Java 中的填充矩形
发布时间:2023/08/08 浏览次数:154 分类:Java
-
如果您使用 Java 处理图形,则可能需要以编程方式绘制矩形。 本文将展示如何在 Java 中绘制一个矩形并为其填充颜色。在 Java Applet 中使用 fillRect() 和 Paint() 方法填充矩形
Java 中的 Cron 作业
发布时间:2023/08/08 浏览次数:184 分类:Java
-
本文将介绍如何使用 Java 创建 Cron 作业。 但在我们开始讨论之前,我们先来看看 Cron 或 Cron job。什么是 Cron 作业
在 Java 中使用 cURL
发布时间:2023/08/08 浏览次数:134 分类:Java
-
本文中我们将学习Java中的cURL。 我们还将学习如何将 cURL 与 ProcessBuilder 和 Runtime.getRuntime 结合使用。Java 中的 cURL
Java 中的 SerialVersionUID
发布时间:2023/08/08 浏览次数:57 分类:Java
-
本文介绍如何在 Java 中使用 SerialVersionUID。Java 中的 SerialVersionUID SerialVersionUID 用于序列化。 序列化是将对象转换为字节流以存储数据并将其发送到某个地方的过程,反序列化是相反的过程。
在 Java 中计算数组的中位数
发布时间:2023/08/08 浏览次数:195 分类:Java
-
本文将举例说明如何计算中位数以及均值与中位数之间的差值。 此外,我们还将向您展示如何解决中位数问题陈述。然后,我们将运行一个Java程序,简而言之,它充分利用了Arrays.sort()、lengt
在 Java 中查找给定数字的因数
发布时间:2023/08/08 浏览次数:76 分类:Java
-
在本文中,我们将学习如何在 Java 中查找给定数字的不同因子或除数。在 Java 中查找给定数字的因数 一种简单的方法是遍历从 1 到 n 的所有数字,看看它们是否能正确整除 n(即余数为零)。
JNDI 及其在 Java 中的用途
发布时间:2023/08/08 浏览次数:180 分类:Java
-
本文将讨论 JNDI(Java 命名和目录接口)是什么、它的主要用途以及何时使用它。 还比较了Java中JNDI的优缺点。Java 中的 Java 命名和目录接口 (JNDI)
Java getActionCommand() 方法
发布时间:2023/08/08 浏览次数:161 分类:Java
-
本文介绍如何在 Java 中使用 getActionCommand() 方法。在 Java 中使用 getActionCommand() 方法 ActionListener 类中的 getActionCommand() 方法标识一个按钮。