什么是Java EE中的拦截器?

Uma*_*air 41 java java-ee interceptor

我试图清除我在Java EE中关于拦截器的概念.我已经阅读了Java EE规范,但我对此并不感到困惑.请提供一些有用的链接或教程,以清除我的概念.How,When,为什么我们使用拦截器?

Aru*_*pta 48

拦截器用于从业务逻辑实现跨域关注,例如日志记录,审计和安全性.

在Java EE 5中,仅允许在EJB上使用拦截器.在Java EE 6中,Interceptor成为了自己的新规范,在更高层次上进行了抽象,因此它可以更广泛地应用于平台中更广泛的规范集.

它们拦截相关目标类的调用和生命周期事件.基本上,拦截器是一个类,其方法在调用目标类上的业务方法时调用,生命周期事件(如创建/销毁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认同)

bla*_*her 10

我喜欢这个定义:拦截器是拦截EJB方法调用的组件.它们可以在访问EJB时用于审计和日志记录.

在另一种情况下,它们可以用于我们需要检查客户端是否具有在数据库中的特定对象上执行事务的权限或许可的情况.好吧,这就是拦截器派上用场的地方; 他们可以通过检查客户端/用户是否可以在该数据库对象或EJB上调用该方法来检查客户端/用户是否具有该权限.

但是,我仍然会查看以下文章和以下教程,以了解它们如何在Java EE设置/环境中使用.


Sun*_*amy 10

拦截器用于向托管bean 添加AOP功能.

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

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

方法拦截器

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

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

拦截器的常见用途是记录,审计和分析.

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