2 Context Dependency Injection 1 1 m2 Slides
2 Context Dependency Injection 1 1 m2 Slides
Antonio Goncalves
www.antoniogoncalves.org
@agoncal
Module Outline
What is injection?
What it is not!
Injecting objects
Java SE
Java EE
What Is Dependency Injection?
Factories
Dependencies passed on constructors…
… or setters
Can be complex
Dependency injector
Container
Provider
What Is a Container?
Components
Services
Provides certain services
Life-cycle management
Dependency injection
Interception
Component
Concurrency
Security
Managed environment
Managed beans
What Is a Managed Bean?
Java SE
Objects
JVM is a container
Class loading
Garbage collection…
Java EE
Servlets
Servlet container
HTTP handling
Pooling…
What Is Context and Dependency Injection?
CDI Beans
Services
CDI services
Dependency injection
Interception
Decoration Injection
Bean
Event handling
Context management
Bean
What Isn’t Context and Dependency Injection?
Not a full Java EE container
…
Extensions
A Brief of History of CDI
Spring, Seam, Guice…
Specification
JSR 346
http://jcp.org/en/jsr/detail?id=346
CDI Implementations
Runtime
Weld
Open WebBeans
CanDI
No vendor locking
DeltaSpike
Extra services
Security
Configuration
Scheduling
Declarative queries for JPA
…
CDI Packages
Package Description
javax.inject Core dependey injection API
javax.enterprise.inject Core CDI API
javax.enterprise.context Scopes and contextual APIs
javax.enterprise.event Events and observers APIs
javax.interceptor Interceptor APIs
javax.decorator Decorator APIs
javax.enterprise.util CDI utility package
Where Can We Use CDI?
Java SE Java EE
What is a CDI Bean?
Concrete class
Default constructor
Can have optional
Qualifiers
Scope
Expression language name
Interceptor bindings
A CDI Bean
@ThirteenDigits
public class IsbnGenerator {
Lifecycle of a POJO
Create an instance with new
Garbage collector
Handle
After construction
Before destruction
Life Cycle of a CDI Bean
Exists
Dependency injection
@PostConstruct @PreDestroy
Managed
Method invocations
Callback Annotations
@PreDestroy
@PostConstruct
@PostConstruct
private void init () {
postfix = Math.abs(new Random().nextInt());
}
@Inject("thirteenDigits")
private NumberGenerator generator;
@Inject @ThirteenDigits
private NumberGenerator generator;
<alternatives>
<class>com.pluralsight.MockGenerator</class>
</alternatives>
<interceptors>
<class>com.pluralsight.LoggingInterceptor</class>
</interceptors>
</beans>
beans.xml
Bean Discovery
Bean archives
d.jar
AnnotatedBean.class
beans.xml ="none"
Where Can We Use CDI?
Business Model
@Entity
@EntityListener(Validation.class)
public class Book {
@Id @GeneratedValue
private Long id;
@NotNull @Title
private String title;
Business Logic
@Inject
private NumberGenerator generator;
@Named
@SessionScoped
public class BookBean {
@Inject
private BookService service;
@Inject
private BookService service;
@Path("/book")
public class BookEndpoint {
@Inject
private BookService service;
@GET
public List<Book> getAllBooks() {...}
}
CDI in Our Tiered Architectures
@Named @Entity
@SessionScoped @EntityListeners
public class BookBean { } public class Book { }
@Path("/book")
public class BookEndpoint { }
Summary
What is injection?
What is CDI?