What Is CDI, How Does It Relate to @EJB And Spring?
source link: https://blog.jakubholy.net/2011/11/09/what-is-cdi-how-does-it-relate-to-ejb-and-spring/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
What Is CDI, How Does It Relate to @EJB And Spring?
Context Dependency Injection (CDI, JSR 299) is a part of Java EE 6 Web Profile and itself builds on Dependency Injection for Java (JSR 330), which introduces @Inject, @Named etc. While JSR 330 is for DI only and is implemented e.g. by Guice and Spring, CDI adds various EE stuff such as @RequestScoped, interceptors/decorators, producers, eventing and a base for integration with JSF, EJBs etc. Java EE components such as EJBs have been redefined to build on top of CDI (=> @Stateless is now a CDI managed bean with additional services).
A key part of CDI aside of its DI capabilities is its awarness of bean contexts and the management of bean lifecycle and dependencies within those contexts (such as @RequestScoped or @ConversationScoped).
CDI is extensible - you can define new context scopes, drop-in interceptors and decorators, make other beans (e.g. from Spring) available for CDI,... .
Resources to check:
- Contexts and Dependency Injection in Java EE 6 by Adam Bien - a very good explanation of the basics of CDI and how it differs from DI in Java EE 5 (hint: context awarness)
- Slideshow with a good overview of CDI and all it offers
- About CDI extensibility and SPIs (e.g. Seam 3 is basically a set of portable CDI extensions)
- Guice and Spring do not implement CDI (3/2011) - and Spring perhaps isn't motivated to do so (it supports JSR 330, CDI would be too much work)
- Update: There seems to be an addon Spring/CDI module in development after all...
may be handyCDI 1.0 vs. Spring 3.1 feature comparsion: bean definition & dependency injection: "in the area that I compared in this article [= DI], there is only little critical difference in the two technologies" (though Spring more fine-tunable)Java EE 6 (CDI / EJB 3.1) XOR Spring Core Reloaded: New projects should preferably start with pure Java EE including CDI and add Spring utilities such as JDBC/JMS when neededOracle: CDI in the Java EE 6 Ecosystem - 62 pages slideshow, the stuff is explained more than in the previously mentioned slideshow
Note: CDI 1.1 (JSR 346, Java EE 7) should have a standard way of bootstrapping it in non-EE environment (i.e. SE)
Are you benefitting from my writing? Consider buying me a coffee or supporting my work via GitHub Sponsors. Thank you! You can also book me for a mentoring / pair-programming session via Codementor or (cheaper) email.
Allow me to write to you!
Let's get in touch! I will occasionally send you a short email with a few links to interesting stuff I found and with summaries of my new blog posts. Max 1-2 emails per month. I read and answer to all replies.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK