CDI redefines the concept of a bean beyond its use in other Java
technologies, such as the JavaBeans and Enterprise JavaBeans (EJB)
technologies. In CDI, a bean is a source of contextual objects that
define application state or logic. A Java EE component is a bean if
the lifecycle of its instances may be managed by the container according
to the lifecycle context model defined in the CDI specification.
More specifically, a bean has the following attributes:
A bean type defines a client-visible type of the bean. Almost any Java
type may be a bean type of a bean.
A bean type may be an interface, a concrete class, or an abstract
class and may be declared final or have final methods.
A bean type may be a parameterized type with type parameters and type
A bean type may be an array type. Two array types are considered
identical only if the element type is identical.
A bean type may be a primitive type. Primitive types are considered to
be identical to their corresponding wrapper types in
A bean type may be a raw type.