关于bean
CDI重新定义了一个bean的概念,超出了其他Java技术(如JavaBeans和Enterprise JavaBeans(EJB))技术的使用。 在CDI中,bean是定义应用程序状态和/或逻辑的上下文对象的源。 如果Java EE组件实例的生命周期可以根据CDI规范中定义的生命周期由容器进行管理,那么它就是一个bean。
更具体地说,一个bean具有以下属性:
bean类型定义了客户端可见类型的bean。 几乎任何Java类型可能是bean的bean类型。
- bean类型可以是一个接口,一个具体的类或一个抽象类,可以被声明为final或具有最终的方法。
- bean类型可以是带有类型参数和类型变量的参数化类型。
- bean类型可以是数组类型。 如果元素类型相同,则两个数组类型被认为是相同的。
- bean类型可能是原始类型。 原始类型被认为与其对应的java.lang中的包装器类型相同。
- bean类型可能是原始类型。
关于CDI托管Bean
托管bean由Java类实现,托管bean被称为Java bean类。 如果通过任何其他Java EE技术规范(如JavaServer Faces技术规范)将其定义为托管bean,或者满足以下所有条件,则顶级Java类是托管bean。
- 它不是一个非静止的内在类。
- 它是一个具体的类或者注释@Decorator。
- 它不使用EJB组件定义注释来注释,也不会在ejb-jar.xml中声明为EJB bean类。
- 它有一个适当的构造函数。 就是说,以下是其中之一。
- 该类有一个没有参数的构造函数。
- 该类声明一个注释为@Inject的构造函数。
不需要特殊声明(如注释)来定义受管Bean.
作为可注入对象的bean
注入的概念已经成为Java技术的一部分。 由于引入了Java EE 5平台,注释使得可以将资源和其他类型的对象注入到容器管理的对象中。 CDI使得可以注入更多种类的对象并将其注入到不是容器管理的对象中。
可以注入以下几种对象: