【问题标题】:Are Interceptors & Decorators part of CDI?拦截器和装饰器是 CDI 的一部分吗?
【发布时间】:2015-10-06 09:39:11
【问题描述】:

许多书籍将它们列在 CDI(上下文和依赖注入)下,但在 Java EE 7 API 中,它们列在 CDI 的不同包下

  • javax.decorator
  • javax.interceptor

【问题讨论】:

    标签: cdi java-ee-7


    【解决方案1】:

    请参阅 JSR-346 以获得答案。你可以找到它here

    装饰器是 CDI 规范的一部分。您可以在第 8 章中找到它。

    拦截器不是 CDI 规范的一部分。它在 1.2.5 中被引用为与 CDI 规范的关系。它是 EJB 规范 JSR-345 的一部分,请参阅该规范中的第 7 章。

    【讨论】:

    • 关于拦截器的说法并不完全正确。实际上,有两种类型的拦截器:在 Java EE 5 中为 EJB 3.0 定义了拦截器,甚至在 CDI 可用之前,Java EE 6 中的 CDI 出现了一种更通用的新型拦截器。 CDI 拦截器可以应用于任何 CDI bean,不仅是 EJB,还可以应用于过时的旧 EJB 3.0 拦截器。较新的 CDI 拦截器当然是 CDI 规范的一部分,就在第 9 章中的装饰器下方。
    • 好吧,我也不完全正确。 EJB规范和CDI规范中提到的拦截器是一样的,都使用@javax.interceptor.AroundInvoke注解来标记拦截器方法。但是,这 2 个规范在拦截器应用于组件的方式上有所不同。在 EJB 规范中,您在 EJB 上使用 @Interceptors 应用拦截器。在 CDI 中,您可以使用 @InterceptorBinding 在任何 CDI bean 上应用拦截器,并且您必须在 beans.xml 中打开它们。
    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 2016-06-12
    • 2014-03-10
    • 2020-06-17
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多