CDI (Contexts and Dependency Injection) je standardni DI framework v Java EE. Od verze 6 je soucast specifikace a konecne nabizi to, co Spring mel roky — typove bezpecnou dependency injection s anotacemi.
Zaklady CDI¶
@Inject misto new. Container spravuje lifecycle objektu, resi zavislosti automaticky. Zadne XML konfigurace — CDI pouziva anotace a convention. Kazda trida s beans.xml v META-INF/WEB-INF je CDI bean.
Scopes¶
@RequestScoped — novy objekt per HTTP request. @SessionScoped — per HTTP session. @ApplicationScoped — singleton. @ConversationScoped — explicitne rizeny scope pres viac requestu. @Dependent — default, novy objekt pri kazde injekci. Spravny scope je klicovy pro spravnou funkcnost a vykon.
Producers¶
@Produces metoda vytvari objekty, ktere CDI container nemuze vyrobit automaticky (EntityManager, konfiguracni hodnoty, externi zdroje). Alternativa k factory patternu — cistsii a deklarativni.
Interceptors a Decorators¶
Interceptors pro cross-cutting concerns: @Interceptor s @AroundInvoke pro logovani, security, caching. @Transactional interceptor nahrazuje EJB transakce. Decorators pro rozsireni business logiky bez zmeny originalu.
CDI vs. Spring DI¶
CDI: standard, soucast Java EE, typove bezpecne kvalifikatory. Spring: starsi, vetsi ekosystem, funguje i bez app serveru. Pro Java EE projekty: CDI. Pro Spring projekty: Spring DI. Nemiixujte oba v jedne aplikaci.
Zaverem¶
CDI je dospely DI framework. Pro Java EE projekty je to preferovana volba — standardni, typove bezpecny a s vybornou integraci s EJB a JPA. Spring DI zustava lepssi volba mimo Java EE kontejner.