This document provides an overview of Contexts and Dependency Injection (CDI) in Java EE 6. It discusses what CDI is, its key features like type-safe dependency injection and automatic contextual lifecycle management. It covers different types of injection like field, method parameter, and constructor injection. It also discusses qualifiers and scopes that allow controlling which implementations are injected in different contexts. The document provides examples of request scoped and application scoped beans and how they are used. It lists some CDI implementation options and supported application containers. It also provides resources to learn more about CDI.
1 of 20
Downloaded 43 times
More Related Content
CDI in JEE6
1. Contexts and Dependency Injection (CDI)
in JEE 6
Presenter
Prasanna Kumar.S
JUGChennai JTech Day Sep'12
2. About me
A Java developer (now interested in Scala as well ...)
Active member in JUG Chennai
Creator & Co-Founder of scalaxia.com (a site which lists
out the popular tweets about scala)
Contributed for ScalaFX project
Contact
Mail me prassee.sathian@gmail.com
Follow me @prasonscala
I blog @ prasonscala@tumblr.com
3. Agenda
What is & Why DI ?
What is CDI
Features of CDI
Advantages of CDI
Injecting Beans (with some EJB tit-bits !!!)
Types of Injection
Qualifiers Built in & custom qualifiers
Scope Types of Scopes
CDI options....
Questions
5. Why Dependency Injection
user just relies (on)ly the Phone
streamlining dependent objects injection by
Don't call your service,
let service call you
Achieve loose coupling of objects
Well proven practise
6. What is CDI
JSR 299
Provides a unifying Dependency Injection and contextual life
cycle model for Java EE
A completely new, richer dependency management model
Type-safe dependency injection
Designed for use with stateful objects (scoped objects)
7. Advantages of CDI
Decouple server and client
Using well-defined types and qualifiers
Allows server implementations to vary
Decouple lifecycle of collaborating components
Automatic contextual lifecycle
management by the CDI runtime
Decouple orthogonal concerns (AOP)
Interceptors & Decorators
NO XML !!!!
Can be used in both JAVA SE and JAVA EE applications
8. Injecting Beans
CDI is all about DI
CDI makes use of annotations
3 Types of injection points
Field
Method Parameter
Methods can be
Constructor
Initializer
Setter
Producer
Observer
9. Basic CDI Beans
public interface Greeting {
public String greet(String greet);
}
@Default
public class PlainGreetingCDI implements Greeting {
public String greet(String greet) {
return "greetings to " + greet;
}
}
// client code
@Inject
private Greeting greeting;
public String sayGreeting(String whomToGreet) {
return greeting.greet(whomToGreet);
}
10. Qualifiers Built in & custom quali-
fiers
public interface CurrencyConverter {
public Double convert(Double howMuchToConvert);
}
@Qualifier
@Retention(RUNTIME)
@Target({ TYPE, METHOD, FIELD, PARAMETER })
public @interface CurrencyType {
VariousCurrencies type() default VariousCurrencies.DOLLAR;
}
@CurrencyType(type = VariousCurrencies.DOLLAR)
public class DollarConverter implements CurrencyConverter {
@Override
public Double convert(Double howMuchToConvert) {
return howMuchToConvert * 55;
}
}
public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
11. Qualifier in CDI
public interface CurrencyConverter {
public Double convert(Double howMuchToConvert);
}
@Qualifier
@Retention(RUNTIME)
@Target({ TYPE, METHOD, FIELD, PARAMETER })
public @interface CurrencyType {
VariousCurrencies type() default VariousCurrencies.DOLLAR;
}
@CurrencyType(type = VariousCurrencies.DOLLAR)
public class DollarConverter implements CurrencyConverter {
@Override
public Double convert(Double howMuchToConvert) {
return howMuchToConvert * 55;
}
}
public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
19. How do I learn / adopt
All code presented here are available under
https://github.com/prassee/JTechDayCDIExamples
You are welcome to contribute your own examples -
(Shameless sales pitch !!!!)
Project using CDI
AGORAVA project - http://agorava.org/
Feel free to contribute
JavaPassion site
http://javapassion.com/jugtalks
TomEE examples Trunk
http://tomee.apache.org/examples-trunk/index.html