5.5. CDI 应用程序更改


JBoss EAP 7.3 包括对 CDI 2.0 的支持。因此,使用 CDI 1.0 或 CDI 1.2 编写的应用程序可能会看到迁移到 JBoss EAP 7.3 时的一些行为变化。本节总结了 CDI 1.2 和 CDI 2.0 中所做的一些更改。

您可以在以下参考中找到有关 Weld 和 CDI 2.0 的更多信息:

Bean 归档

必须将已启用 Bean 类的 Bean 类部署在 bean 存档中,以确保它们被 CDI 扫描以查找和处理 bean 类。

在 CDI 1.0 中,如果某一存档在 META-INF/ 目录中包含用于应用客户端、EJB 或库 JAR 的 beans.xml 文件,或者 WEB-INF/ 目录中包含 beans.xml 文件,则定义为 式 Bean 存档。

CDI 1.1 引入了隐式 Bean 存档,即包含一个或多个 bean 定义注解或一个或多个会话 Bean 类的存档。CDI 会扫描隐式 Bean 存档,并在类型发现过程中仅发现带 bean 定义注解的类。如需更多信息,请参阅 JSR 365 中的 Type 和 Bean Discovery、Java 2.0 的上下文和依赖注入。Jakarta 同等的 bean 定义注解在 Jakarta Context Dependency Injection 2.0 规范中定义。

Bean 存档具有 所有 带注解 或无 Bean 发现 模式。包含 beans.xml 文件(不含任何版本)的 bean 存档具有 所有 版本的默认 Bean 发现模式。包含版本 1.1 或更高版本的 beans.xml 文件的 bean 存档必须指定 bean-discovery-mode 属性。属性的默认值被 标注

在以下情况下,存档不是 Bean 归档:

  • 它包含 beans.xml 文件,bean-discovery-modenone
  • 它包含没有 beans.xml 文件的 CDI 扩展名。

在以下情况下,存档是一个显式 Bean 归档:

  • 归档中包含 beans.xml 文件,版本号为 1.1 或更高版本,并且是 bean-discovery-mode
  • 归档中包含 beans.xml 文件,无版本号。
  • 存档包含一个空的 beans.xml 文件。

在以下情况下,存档是一个隐式 Bean 归档:

  • 归档包含一个或多个 bean 类,其中包含 Bean 定义注释,或者一个或多个会话 Bean,即使它不包含 beans.xml 文件。
  • 归档中包含 beans.xml 文件,其 bean-discovery-mode 标注 为。

CDI 1.2 限制为以下定义注解

  • @ApplicationScoped@SessionScoped@ConversationScoped@RequestScoped 注释
  • 所有其他普通范围类型
  • @interceptor@Decorator 注释
  • 所有 stereotype 注释,它们标有 @Stereotype 的注释
  • @depion scope 注解

有关 Bean 归档的更多信息,请参阅 JSR 365 中的 Bean Archives :Java 2.0 的上下文和依赖注入。Jakarta 同等的 bean 存档在 Jakarta Context Dependency Injection 2.0 规范中定义。

解释对话解析

CDI 1.2 中更改了对话上下文生命周期,以防止与 Servlet 规范冲突,如 CDI 规范 Isue CDI-411 所述。对话范围在所有 servlet 请求中处于活动状态,不应阻止其他 servlet 或 servlet 过滤器设置请求正文或字符编码。如需更多信息,请参阅 Jakarta EE 中的对话上下文生命周期

观察解决方案

事件解析在 CDI 1.2 中被部分重写。在 CDI 1.0 中,如果观察方法具有所有事件限定符,则会将事件发送到观察方法。在 CDI 1.2 中,如果观察方法没有事件限定符或事件限定符的一个子集,事件将传送到观察方法。如需更多信息,请参阅 Observer 解析

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部