从JBoss Seam 2.x迁移到JavaEE 7之一:组件模型

时间:2021-12-07 20:00:21

JBoss Seam中的Component可以是如下类型的POJO:

  • Java Bean
  • EJB 3.0无状态会话Bean
  • EJB 3.0有状态会话Bean
  • EJB 3.0消息驱动Bean
  • JPA实体Bean
  • Spring Bean

 

JavaEE 7 CDI支持如下类型的Bean:

  • Managed Bean
  • EJB会话Bean
  • EJB消息驱动Bean
  • Producer的方法和字段
  • 各种资源,如JavaEE Resources、持久化上下文、持久化单元、远程EJB和WebServices

 

JavaEE 7 CDI的Managed Bean就是一个Java类,Managed Bean规范中定义一个Java类是ManagedBean的条件如下:

  • 不是非静态内部类
  • 不是EJB组件
  • 没有实现javax.enterprise.inject.spi.Extension接口
  • 是具体类,或者@Decorator标注的抽象类
  • 构造函数要么无参数,要么@Inject标注

 

JavaEE 7 CDI的Managed Bean与JBoss Seam中的Component之间的对比:

Seam 2 

component

CDI 

Managed Bean

说明

必须@Name标注

components.xml中定义

无需任何标注

 

默认在EL中可用

只有@Named标注才能在EL中可用

双向注入

不支持双向注入

Seam 2是通过拦截器动态实现对组件方法调用的双向注入。

CDI只支持静态一次性单向注入,即在组件的生命周期中只注入一次。

配置文件seam.properties components.xml

可选配置文件beans.xml

显式定义

隐式定义

every Java class in the bean archive that meets certain conditions is implicitly recognized as a managed bean

Seam 2 needs @Name or inclusion in XML descriptor