O documento introduz os principais recursos do CDI (Contexts and Dependency Injection) e como utilizá-los em aplicações reais. O CDI fornece injeção de dependência, escopos, interceptadores, decoradores, eventos e extensões personalizadas de forma tipada e desacoplada. O documento também demonstra como esses recursos podem ser combinados para construir aplicações robustas.
genesis - Acelerando o desenvolvimento de aplicações desktop
CDI: Introdução aos recursos e como utilizá-los em aplicações
1. Introdução a CDI e como utilizá-la
em aplicações reais
Michel Graciano
TDC 2012
2. Agenda
• Introdução e visão geral
• Recursos diferenciados
• Como utilizar isso tudo junto?
• Perguntas
3. “CDI is more than a framework. It's a whole, rich
programming model. The theme of CDI is loose-
coupling with strong typing.” Weld specification
4. Introdução
• Abordagem fortemente tipada
– Uso extensivo de anotações e tipos Java
• Contextual
– O gerenciamento contextual de ciclos de vida
desacopla o ciclo de vida de cada bean
• Injeção de dependências
– @javax.inject.Inject
• Beans and injectable objects @Inject
Saudacao
saudacao;
5. Introdução
• Qualificadores
– @Qualifier
• Nomes EL
– @Named
• Configuração
– beans.xml
@Informal
@Inject
Saudacao
saudacao;
7. Recursos diferenciados
• Combinação clara de escopos
• Acesso ao ponto de injeção
• AOP sem interfaces
• Sistema de eventos
• Producers
• Extensões portáveis
8. Escopos
• Determina o ciclo de vida das instâncias do
bean
• Tipos de escopos
– Request
– Session
– Application
– Dependent
– Conversation
9. Interceptors
• Desacopla detalhes técnicos da lógica de
negócio
• Ortogonal ao sistema de tipos Java e da
aplicação
• Tipos de pontos de interceptação
– Métodos de negócio
– Callbacks de ciclo de vida
• Utiliza o conceito de interceptor binding
• Habilitado via beans.xml
10. Decorators
• Permite que regras de negócios sejam
organizadas utilizando o conceito de
interceptors
• Vinculado a um tipo Java
– Inerente a interface de negócio
• Delegate através de injeção de dependência
– @Delegate
• São executados após os interceptors
• Habilitado via beans.xml
11. Sistema de eventos
• Inspirado no padrão Observer
• Os produtores de eventos são totalmente
desacoplados dos consumidores, e vice-versa
• Filtro de notificações utilizando-se
qualificadores
• Possibilidade de uso de consumidores
condicionais e transacionais
12. Stereotypes
• Agregador de metadados
– Escopo padrão
– Interceptors bindings
– Nome EL padrão
– Alternativas
– Aninhamento de Stereotypes
• Stereotype nativo
– @Model
13. Alternativas e especializações
• Permite polimorfismo em tempo de deployment
– @Alternative
– @Specializes
• Habilitado via beans.xml
14. Producers
• Permite polimorfismo em tempo de execução
• @Produces pode ser aplicado a métodos e
campos
• Objetos injetados via producer methods podem
ser destruídos utilizando disposer methods
– @Disposes
15. Producer methods
• Podem definir um escopo
• Casos de uso comuns
– O objeto a ser injetado não é exatamente um bean
– O tipo do objeto a ser injetado pode variar em tempo
de execução
– O objeto a ser injetado precisa de uma inicialização
personalizada
16. Extensões portáveis
• A SPI permite às extensões
– Prover seus próprios beans, interceptors e
decorators ao container
– Injetar dependências em objetos
– Prover uma implementação personalizada a um
novo escopo
– Aprimorar ou substituir metadados de anotações a
partir de outras fontes
– Acompanhar eventos nativos do CDI
19. @TypedQuery tipada
-------------------------------------------------------------
COMPILATION ERROR :
-------------------------------------------------------------
and returns false.
model/CustomerModel.java:[47,25] error: Named query 'Customer.findByNme' not defined yet.
model/CustomerModel.java:[43,25] error: Named query 'Customer.findAl' not defined yet.
2 errors
-------------------------------------------------------------