Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6

2 616 vues

Publié le

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."

Publié dans : Technologie

TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6

  1. 1. Contexts & Dependency Injection (CDI) Explorando os conceitos básicos da API de CDI do Java EE 6 Dr. Spock @drspockbr
  2. 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
  3. 3. Agenda• Introdução e conceitos• Principais recursos• Demonstração• Q&A
  4. 4. Introdução & Conceitos
  5. 5. O que é CDI?
  6. 6. “Contexts and Dependency Injection(CDI) é a especificação da plataforma Java EE que adiciona os conceitos de injeção de dependência e contextosaos componentes de negócios de uma aplicação corporativa.”
  7. 7. Características• Type-safe;• Orientado a anotações;• Consistente;• Portável;• Turbina o modelo de componentes do Java EE.
  8. 8. 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.
  9. 9. Servidores deAplicações Java EE 6
  10. 10. Origens do CDI
  11. 11. Origens do CDIJSR-299 JSR-330Web Beans Dependency Injection for Java
  12. 12. Origens do CDI JSR-299 JSR-330Contexts and Dependency Injection Dependency Injection for Java EE for Java
  13. 13. Origens do CDI JSR-299 JSR-330Contexts and Dependency Injection Dependency Injection for Java EE for Java
  14. 14. Implementaçãode Referência
  15. 15. Implementaçãode Referência
  16. 16. CDI no Java EE 6
  17. 17. CDI no Java EE 6
  18. 18. Entendendoa 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.
  19. 19. Entendendoos Contextos (Contexts) • Contextos definem tempo de vida e visibilidade; • Numa aplicação web, são associados aos escopos web;
  20. 20. Entendendoos 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.
  21. 21. Entendendoos 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. 22. Entendendoos 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. 23. Principais Recursos
  24. 24. Principais Recursos• Managed Bean• Injection• Contexts• Qualifiers• Events• Alternatives
  25. 25. Principais Recursos• Specializations• Producers/Disposers• Stereotypes• Interceptors• Decorators• Portable Extensions (SPI)
  26. 26. 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
  27. 27. 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
  28. 28. Contextos @ManagedBean @RequestScoped public class CaixaEletronicoManager {• JSR-220 // ... }• @javax.enterprise.context.RequestScoped• @ConversationScoped• @SessionScoped• @ApplicationScoped• @Dependent
  29. 29. 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. }
  30. 30. Qualificadores• Meta-anotação: @javax.inject.Qualifier• 1º Qualificador: @Qualifier @TDCBanK @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,• 2º Qualificador: ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @SpockBanK public @interface TDCBank {} @Qualifier @Target({ ... }) @Retention(RetentionPolicy.RUNTIME) public @interface SpockBank {}
  31. 31. Eventos• Permite desacoplar componentes; public class ComponenteA { @Inject private ComponenteB dependencia; }
  32. 32. Eventos• Permite desacoplar componentes;• O CDI gerencia a propagação de eventos;
  33. 33. Eventos• Permite desacoplar componentes;• O CDI gerencia a propagação de eventos;• Vários componentes podem reagir ao evento;
  34. 34. 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); }
  35. 35. 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. } }
  36. 36. Perguntas
  37. 37. Obrigado!• Contato: Dr. Spock tdc2012@spock.com.br• Twitter: @drspockbr• About me: http://about.me/drspockbr• Slides & Código: http://slideshare.net/drspockbr http://bit.ly/MYmjPR

×