Introdução a CDI e como utilizá-la       em aplicações reais            Michel Graciano               TDC 2012
Agenda•   Introdução e visão geral•   Recursos diferenciados•   Como utilizar isso tudo junto?•   Perguntas
“CDI is more than a framework. Its a whole, richprogramming model. The theme of CDI is loose- coupling with strong typing....
Introdução• Abordagem fortemente tipada  – Uso extensivo de anotações e tipos Java• Contextual  – O gerenciamento contextu...
Introdução• Qualificadores  – @Qualifier• Nomes EL  – @Named• Configuração  – beans.xml                       @Informal   ...
DEMO
Recursos diferenciados•   Combinação clara de escopos•   Acesso ao ponto de injeção•   AOP sem interfaces•   Sistema de ev...
Escopos• Determina o ciclo de vida das instâncias do  bean• Tipos de escopos  – Request  – Session  – Application  – Depen...
Interceptors• Desacopla detalhes técnicos da lógica de  negócio• Ortogonal ao sistema de tipos Java e da  aplicação• Tipos...
Decorators• Permite que regras de negócios sejam  organizadas utilizando o conceito de  interceptors• Vinculado a um tipo ...
Sistema de eventos• Inspirado no padrão Observer• Os produtores de eventos são totalmente  desacoplados dos consumidores, ...
Stereotypes• Agregador de metadados  – Escopo padrão  – Interceptors bindings  – Nome EL padrão  – Alternativas  – Aninham...
Alternativas e especializações• Permite polimorfismo em tempo de deployment  – @Alternative  – @Specializes• Habilitado vi...
Producers• Permite polimorfismo em tempo de execução• @Produces pode ser aplicado a métodos e  campos• Objetos injetados v...
Producer methods• Podem definir um escopo• Casos de uso comuns  – O objeto a ser injetado não é exatamente um bean  – O ti...
Extensões portáveis• A SPI permite às extensões  – Prover seus próprios beans, interceptors e    decorators ao container  ...
Extensões portáveis
E como tudo isso funciona junto?
@TypedQuery tipada-------------------------------------------------------------COMPILATION ERROR :------------------------...
Perguntas?
Obrigado!           Michel Graciano                @mgracianohttps://github.com/mgraciano/javaone-2012       http://www.mi...
Upcoming SlideShare
Loading in …5
×

Introdução a CDI e como utilizá-la em aplicações reais

2,223 views

Published on

Published in: Technology

Introdução a CDI e como utilizá-la em aplicações reais

  1. 1. Introdução a CDI e como utilizá-la em aplicações reais Michel Graciano TDC 2012
  2. 2. Agenda• Introdução e visão geral• Recursos diferenciados• Como utilizar isso tudo junto?• Perguntas
  3. 3. “CDI is more than a framework. Its a whole, richprogramming model. The theme of CDI is loose- coupling with strong typing.” Weld specification
  4. 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. 5. Introdução• Qualificadores – @Qualifier• Nomes EL – @Named• Configuração – beans.xml @Informal @Inject Saudacao saudacao;
  6. 6. DEMO
  7. 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. 8. Escopos• Determina o ciclo de vida das instâncias do bean• Tipos de escopos – Request – Session – Application – Dependent – Conversation
  9. 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. 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. 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. 12. Stereotypes• Agregador de metadados – Escopo padrão – Interceptors bindings – Nome EL padrão – Alternativas – Aninhamento de Stereotypes• Stereotype nativo – @Model
  13. 13. Alternativas e especializações• Permite polimorfismo em tempo de deployment – @Alternative – @Specializes• Habilitado via beans.xml
  14. 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. 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. 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
  17. 17. Extensões portáveis
  18. 18. E como tudo isso funciona junto?
  19. 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-------------------------------------------------------------
  20. 20. Perguntas?
  21. 21. Obrigado! Michel Graciano @mgracianohttps://github.com/mgraciano/javaone-2012 http://www.michelgraciano.com

×