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

  • 1,389 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,389
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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. Its a whole, richprogramming 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;
  • 6. DEMO
  • 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
  • 17. Extensões portáveis
  • 18. E como tudo isso funciona junto?
  • 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. Perguntas?
  • 21. Obrigado! Michel Graciano @mgracianohttps://github.com/mgraciano/javaone-2012 http://www.michelgraciano.com