type=page
status=published
title=About Beans
next=cdi-basic004.html
prev=cdi-basic002.html
~~~~~~
= About Beans

[[GJEBJ]]

[[about-beans]]
About Beans
-----------

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 (nonempty) set of bean types
* A (nonempty) set of qualifiers (see link:cdi-basic006.html#GJBCK[Using
Qualifiers])
* A scope (see link:cdi-basic008.html#GJBBK[Using Scopes])
* Optionally, a bean EL name (see link:cdi-basic009.html#GJBAK[Giving
Beans EL Names])
* A set of interceptor bindings
* A bean implementation

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
variables.
* 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 `java.lang`.
* A bean type may be a raw type.
