Contexts and Dependency Injection (CDI) defines a set of complementary services that help improve the structure of application code.

Core CDI specification is split into Lite and Full. Lite includes most of the features and is tailored for runtimes that don't intend to implement the entire Jakarta EE platform. Full includes features that are not deemed necessary for all CDI implementations. Jakarta EE implementations are required to support Full.

CDI allows objects to be bound to lifecycle contexts, to be injected, to be associated with interceptors and decorators, and to interact in a loosely coupled fashion by {@linkplain jakarta.enterprise.event.Event firing} and {@linkplain jakarta.enterprise.event.Observes observing} events. {@linkplain jakarta.enterprise.inject Various kinds} of objects are injectable, including EJB 3 session beans, managed beans, {@linkplain jakarta.enterprise.inject.Produces producer methods} and Jakarta EE resources. We refer to these objects in general terms as beans and to instances of beans that are bound to contexts as contextual instances.