7.5. CDI 应用程序更改


JBoss EAP 8.0 包括对 CDI 4.0 的支持。因此,使用旧 CDI 版本编写的应用程序可能会在迁移到 JBoss EAP 8.0 时看到一些行为更改。本节仅总结了其中的一些变化。

有关 Weld 和 CDI 4.0 的更多信息,请参阅:

7.5.1. Bean 归档

已启用 Bean 的 Bean 类必须在 bean 存档中部署,以确保它们由 CDI 发现,并作为 Bean 进行处理。

CDI 1.1 引入了 隐式 bean 归档,存档包含一个或多个带有定义注解的 bean 类,或者一个或多个 session Bean。隐式 Bean 归档由 CDI 扫描,在类型发现期间只发现带有 bean 定义注解的类。如需更多信息,请参阅 JSR 365: 上下文和依赖注入 Java 2.0 中的 Type 和 Bean Discovery。Jakarta 等同于 bean 定义注解,在 Jakarta 上下文依赖注入 2.0 规格中定义

在 CDI 4.0 中:

  • 归档不会区分 bean.xml 是否具有版本号。
  • 除了构建兼容的扩展外,存档还包含没有 beans.xml 文件的存档。构建兼容扩展不是 bean 归档。
  • 带有空 beans.xml 文件的存档的默认发现模式被设置为 annotated 而不是 all。例如,如果 beans.xml 文件为空,则它是一个隐式 bean 归档而不是显式 bean 归档。
  • 在这两种情况下,bean 发现元素在带有和不使用 beans.xml 文件的存档之间不受影响。

有关 CDI 4.0 的更多信息,请参阅 Jakarta 上下文和依赖注入 4.0

bean 归档具有 all, annotatednone 的 bean 发现模式。包含非空 Bean.xml 的 bean 归档必须指定 bean-discovery-mode 属性。属性的默认值被 annotated

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

  • 它包含一个 Bean.xml 文件,bean-discovery-modenone
  • 它包含可移植扩展或构建兼容扩展,且没有 Bean.xml 文件。

归档是 在以下情况下明确的 bean 归档:

  • 归档包含一个 beans.xml 文件,并且 bean-discovery-mode 都为

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

  • 归档包含一个空的 beans.xml 文件。
  • 存档包含一个或多个 bean 类,它们带有 bean 定义注解或一个或多个会话 Bean,即使它不包含 Bean.xml 文件。

CDI 1.2 限于定义以下注解

  • @ApplicationScoped,@SessionScoped,@ConversationScoped, 和 @RequestScoped 注释
  • 所有其他常规范围类型
  • @Interceptor@Decorator 注解
  • 所有 stereotype 注释,注释为 @Stereotype
  • @Dependent scope 注释

7.5.2. 阐明对话解析的问题

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

7.5.3. Observer 解析

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

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部