5.5. CDI 应用更改
JBoss EAP 7.4 包含对 CDI 2.0 的支持。因此,使用 CDI 1.0 或 CDI 1.2 编写的应用程序可能会在迁移到 JBoss EAP 7.4 时看到一些行为更改。本节总结了 CDI 1.2 和 CDI 2.0 中所做的一些更改。
您可以在以下引用中找到有关 Weld 和 CDI 2.0 的更多信息:
Bean 归档
bean enabled Bean 类必须部署到 bean 存档中,以确保它们由 CDI 扫描并处理 bean 类。
在 CDI 1.0 中,一个归档在一个 explicit bean 归档中定义,如果它在 META-INF/
目录中包括一个 beans.xml
文件用于应用程序客户、EJB 或库 JAR,或它在 WEB-INF/
目录中包括一个 beans.xml
文件用于 WAR。
CDI 1.1 引入了 隐式 bean 归档,存档包含一个或多个带有定义注解的 bean 类,或者一个或多个 session Bean。隐式 bean 存档由 CDI 扫描,在类型发现过程中,只会发现带有 bean 定义注解的类。如需更多信息,请参阅 JSR 365、上下文和依赖注入中的 Type 和 Bean Discovery for Java 2.0。Jakarta 为 bean 定义注解的等效项在 Jakarta 上下文依赖注入 2.0 规格中定义。
bean 归档具有 all
, annotated
或 none
的 bean 发现模式。包含一个 bean
归档,其中包含没有版本且无 version 的 bean 发现模式,all
均有默认的 bean 发现模式。包含带有版本 1.1
或更新的 Bean.xml
文件的 bean 归档必须指定 bean-discovery-mode
属性。属性的默认值被 annotated
。
在以下情况下,存档不是 bean 归档:
-
它包含一个
Bean.xml
文件,bean-discovery-mode
为none
。 -
它包含一个 CDI 扩展,没有
Bean.xml
文件。
在以下情况下,存档是一个 明确的 归档:
-
归档包含
Bean.xml
文件,其版本号为 1.1 或以上,并且是bean-discovery-mode
是all
。 -
归档包含一个
beans.xml
文件,且无版本号。 -
归档包含空的
beans.xml
文件。
归档是在以下情况下的一个 隐式 存档:
-
存档包含一个或多个 bean 类,它们带有 bean 定义注解或一个或多个会话 Bean,即使它不包含
Bean.xml
文件。 -
归档包含一个
beans.xml
文件,bean-discovery-mode
为annotated
。
CDI 1.2 限于定义以下注解 :
-
@ApplicationScoped
、@SessionScoped
、@ConversationScoped
、@RequestScoped
annotations - 所有其他常规范围类型
-
@Interceptor
和@Decorator
注解 -
所有 stereotype 注解,注解为
@Stereotype
-
@Dependent
scope 注释
有关 bean 归档的更多信息,请参阅 JSR 365:上下文和依赖注入 Java 2.0 中的 Bean 存档。Jakarta 等同于 Bean 归档,在 Jakarta 上下文依赖注入 2.0 规格中定义。
解析解析
CDI 1.2 中更改了对话上下文生命周期,以防止与 Servlet 规范冲突,如 CDI 规范问题 CDI-411 所述。对话范围在所有 servlet 请求期间处于活跃状态,不应阻止其他 servlet 或 servlet 过滤器设置请求正文或字符编码。如需更多信息,请参阅 Jakarta EE 中的整合上下文生命周期。
观察器解析
在 CDI 1.2 中,事件解析部分被重写。在 CDI 1.0 中,如果观察器方法具有所有事件限定符,则会向观察器发送事件。在 CDI 1.2 中,如果观察器方法没有事件限定符或者具有事件限定符的子集,则会向观察者发送事件。如需更多信息,请参阅 Observer 解析。