迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java EE 中的拦截器简介

作者:迹忆客 最近更新:2023/08/08 浏览次数:

在本文中,我们将介绍 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){...}
    ...
}

你可以检查这个来详细探索拦截器。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 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 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便