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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,