上下文和依赖性注入 1.2 行为更改

上下文和依赖性注入 (CDI) 1.2 实现包含一些行为更改,它们可能导致从 CDI 1.0 迁移的应用程序在 CDI 1.2 上以不同方式运行或失败。

CDI 1.0 基于 CDI 的 Apache OpenWebBeans 实现,而 CDI 1.2 基于 Weld 实现。引入的行为更改会体现这两个实现之间的差别。

对话标识 CID

在 CDI 1.0 实现中,CID 是全局唯一的。在 CDI 1.2 中,对于每个 HTTP 会话,它是唯一的。此行为符合 CDI 规范并由 Weld 实现。要获取全局唯一 CID,必须在对话开始时通过调用 Conversation.begin 来指定 CID。

beans.xml 文件中引用模式

beans.xml 文件引用了以下模式示例:
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
如果您使用无效模式,那么服务器将给出异常错误。设置 org.jboss.weld.xml.disableValidating=true 以关闭 beans.xml 文件的验证并防止发生错误。如果 beans.xml 文件指定修饰符或拦截器,那么必须使用有效模式,否则修饰符和拦截器不会正确实例化。

隐式 bean 归档

CDI 1.2 实现定义两种不同类型的 bean 归档:显式和隐式。

显式 bean 归档包含具有下列任一特征的 beans.xml 文件:
  • 版本号为 1.1(或更高版本),并且 bean-discovery-mode 为 all
  • 没有版本号
  • 空文件

隐式 bean 归档是任何其他归档,它包含一个或多个 bean 类(这些类的 bean 定义注释是在规范的 2.5.1 节“bean 定义注释”中定义的)或者一个或多个会话 bean。请参阅以下规范:用于 Java™ EE 平台的上下文和依赖性注入

将模式更新为 CDI 1.2 实现时,为使 bean 归档保持为显式,bean 发现方式必须设置为 all
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="all" version="1.1"
</beans>
注: 隐式 bean 归档仅发现具有 bean 定义注释的 bean。

这种新类型的 bean 归档可以产生一个归档,所产生的归档不会成为 CDI bean 归档,但在 CDI 1.2 实现中却会变为隐式 bean 归档。要停止此行为,您可以添加一个将 bean 发现方式设置为 nonebeans.xml 文件,以阻止该归档变为 bean 归档。另一种解决方案是将系统属性 com.ibm.ws.cdi.enableImplicitBeanArchives 设置为 false。将此属性设置为 false 会阻止不含 beans.xml 文件的归档变为隐式 bean 归档并减少启动时间。 要了解如何设置系统属性,请参阅“Java 虚拟机设置”

生命周期拦截器

如果在生命周期拦截器上声明了以下拦截器绑定,那么 ElementType.TYPE 将是唯一允许的目标:
@InterceptorBinding
@Retention( RetentionPolicy.RUNTIME )
@Target( {ElementType.TYPE, ElementType.METHOD} )
public @interface SFCDIInterceptorBinding {} 
 

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_cdi_behavior
文件名:cweb_cdi_behavior.html