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 |
说明 |
必须
|
无需任何标注 |
|
默认在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 |