Palestra de introdução aos conceitos básicos da API de CDI (Contexts & Dependency Injection) do Java EE 6 realizada no The Developers Conference 2012 em São Paulo para a trilha de Java EE University.
Resumo: "Dentre todas as APIs que compõem a especificação da plataforma Java EE 6, a API de Contextos e Injeção de Dependência (Contexts and Dependency Injection), ou simplesmente CDI, é a grande novidade que não existia nas versões anteriores desta plataforma. Esta API adiciona um suporte ao padrão de projetos chamado de "Injeção de Dependências" como uma ferramenta de modelagem. Contudo, muito mais do que injeção de dependências, esta especificação estabelece novos conceitos que revolucionam as estrategias na construção de componentes de negócios. Esta apresentação, em caráter introdutório, descreve os principais conceitos e recursos do CDI que facilitam o processo de construção de aplicações enterprise robustas e eficientes com produtividade."
1. Contexts & Dependency
Injection (CDI)
Explorando os conceitos básicos da API de
CDI do Java EE 6
Dr. Spock
@drspockbr
2. @bout me!
• Bacharel e especialista em Física
pela UFV e Unicamp;
• Desenvolvedor de aplicações
Web desde 96 e Java desde 99;
• Palestrante nos principais
eventos nacionais e
internacionais;
• Integrante da equipe de
desenvolvimento da Vocado LLC
7. “Contexts and Dependency Injection
(CDI) é a especificação da plataforma
Java EE que adiciona os conceitos de
injeção de dependência e contextos
aos componentes de negócios de uma
aplicação corporativa.”
9. Características
• Definido por uma
especificação (JSR) do
JCP;
• Provê uma API com
classe, interfaces e
anotações;
• Implementado em
diversos servidores de
aplicações.
19. Entendendo
a Injeção de Dependências (DI)
• “Container” gerencia o
ciclo de vida dos
componentes;
• Componente A depende
do Componente B;
• Componente A recebe
referência para
Componente B;
• Container injeta referência.
20. Entendendo
os Contextos (Contexts)
• Contextos definem tempo
de vida e visibilidade;
• Numa aplicação web, são
associados aos escopos
web;
21. Entendendo
os Contextos (Contexts)
• Contextos definem tempo
de vida e visibilidade;
• Numa aplicação web, são
associados aos escopos
web;
• Proxies são usados para
resolver a referência de
acordo o contexto.
22. Entendendo
os Contextos (Contexts)
• Contextos definem tempo
de vida e visibilidade;
• Numa aplicação web, são
associados aos escopos
web;
• Proxies são usados para
resolver a referência de
acordo o contexto.
23. Entendendo
os Contextos (Contexts)
• Contextos definem tempo
de vida e visibilidade;
• Numa aplicação web, são
associados aos escopos
web;
• Proxies são usados para
resolver a referência de
acordo o contexto.
27. Managed Bean
@ManagedBean
public Class TDCBankCaixaEletronico
implements ICaixaEletronico {
// ...
• Conceito chave; }
• JSR-250 - Common Annotation
• @javax.annotation.ManagedBean
• Opcional para o CDI
• Necessário:
/META-INF/beans.xml
28. Injeção de Dependência
@Inject
private ICaixaEletronico cxEletronico;
• JSR-330
• @javax.inject.Inject
• Baseado no tipo do
atributo ou parâmetro
• Injeta ocorrência única
do tipo
33. Qualificadores
• Anotações usadas para
eliminar ambiguidade
na injeção;
(Ex.: @TDCBank)
@Inject
• Define um filtro @TDCBank
private ICaixaEletronico cxEletronico;
tipado;
@ManagedBean
• Usado em @TDCBank
public Class TDCBankCaixaEletronico
diversos pontos implements ICaixaEletronico {
// ...
de injeção. }
38. Eventos
• Permite desacoplar
componentes;
• O CDI gerencia a
propagação de eventos;
• Vários componentes
podem reagir ao
evento;
39. Eventos
• Envio de eventos via
beans injetáveis do tipo:
javax.enterprise.event.Event<T>
• Pede um qualificador para filtrar
eventos; @Inject
@Auditoria
private Event<Transferencia> eventManager;
public void transferir(Transferencia t) {
// Lógica de negócio.
eventManager.fire(t);
}
40. Eventos
• Observador captura
evento via parâmetro
anotado com:
@javax.enterprise.event.Observes
public class Auditor {
public void transferencias(
@Observes @Auditoria Transferencia t) {
// Lógica de auditoria de transferências.
}
}