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, annotated 或 none 的 bean 发现模式。包含非空 Bean.xml 的 bean 归档必须指定 bean-discovery-mode 属性。属性的默认值被 annotated。
在以下情况下,存档不是 bean 归档:
-
它包含一个
Bean.xml文件,bean-discovery-mode为none。 -
它包含可移植扩展或构建兼容扩展,且没有
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 -
@Dependentscope 注释
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 解析。