SlideShare uma empresa Scribd logo
1 de 43
Contexts & Dependency
   Injection (CDI)
  Explorando os conceitos básicos da API de
              CDI do Java EE 6

                 Dr. Spock
                @drspockbr
@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
Agenda

• Introdução e conceitos

• Principais recursos

• Demonstração

• Q&A
Introdução &
  Conceitos
O que é CDI?
“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.”
Características
• Type-safe;

• Orientado a anotações;

• Consistente;

• Portável;

• Turbina o modelo de
  componentes do Java EE.
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.
Servidores de
Aplicações Java EE 6
Origens do CDI
Origens do CDI




JSR-299         JSR-330
Web Beans   Dependency Injection
                 for Java
Origens do CDI




          JSR-299                       JSR-330
Contexts and Dependency Injection   Dependency Injection
           for Java EE                   for Java
Origens do CDI




          JSR-299                       JSR-330
Contexts and Dependency Injection   Dependency Injection
           for Java EE                   for Java
Implementação
de Referência
Implementação
de Referência
CDI no Java EE 6
CDI no Java EE 6
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.
Entendendo
os Contextos (Contexts)
            • Contextos definem tempo
              de vida e visibilidade;

            • Numa aplicação web, são
              associados aos escopos
              web;
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.
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.
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.
Principais Recursos
Principais Recursos
• Managed Bean

• Injection

• Contexts

• Qualifiers

• Events

• Alternatives
Principais Recursos
• Specializations

• Producers/Disposers

• Stereotypes

• Interceptors

• Decorators

• Portable Extensions
  (SPI)
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
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
Contextos
                        @ManagedBean
                        @RequestScoped
                        public class CaixaEletronicoManager {
• JSR-220                  // ...
                        }

• @javax.enterprise.context.RequestScoped

• @ConversationScoped

• @SessionScoped

• @ApplicationScoped

• @Dependent
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.       }
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 {}
Eventos
• Permite desacoplar
  componentes;




                       public class ComponenteA {
                         @Inject
                         private ComponenteB dependencia;
                       }
Eventos
• Permite desacoplar
  componentes;

• O CDI gerencia a
  propagação de eventos;
Eventos
• Permite desacoplar
  componentes;

• O CDI gerencia a
  propagação de eventos;

• Vários componentes
  podem reagir ao
  evento;
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);
                   }
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.
          }
        }
Perguntas
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

Mais conteúdo relacionado

Destaque

CDI - Unindo Seam, Spring e Guice
CDI - Unindo Seam, Spring e GuiceCDI - Unindo Seam, Spring e Guice
CDI - Unindo Seam, Spring e GuiceLucas Medeiros
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e DependênciasWende Mendes
 
TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDIRodrigo Cândido da Silva
 
Nova Arquitetura no JavaEE com CDI 2.0
Nova Arquitetura no JavaEE com CDI 2.0Nova Arquitetura no JavaEE com CDI 2.0
Nova Arquitetura no JavaEE com CDI 2.0Alexandre Gama
 

Destaque (7)

CDI - Unindo Seam, Spring e Guice
CDI - Unindo Seam, Spring e GuiceCDI - Unindo Seam, Spring e Guice
CDI - Unindo Seam, Spring e Guice
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
Seam 3 e CDI: O futuro do Java EE 6
Seam 3 e CDI: O futuro do Java EE 6Seam 3 e CDI: O futuro do Java EE 6
Seam 3 e CDI: O futuro do Java EE 6
 
Do Seam à CDI (JSR-299)
Do Seam à CDI (JSR-299)Do Seam à CDI (JSR-299)
Do Seam à CDI (JSR-299)
 
TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDI
 
Sistemas de capotaria
Sistemas de capotariaSistemas de capotaria
Sistemas de capotaria
 
Nova Arquitetura no JavaEE com CDI 2.0
Nova Arquitetura no JavaEE com CDI 2.0Nova Arquitetura no JavaEE com CDI 2.0
Nova Arquitetura no JavaEE com CDI 2.0
 

Semelhante a CDI Introdução e Conceitos

TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6Dr. Spock
 
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileJava CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileVictor Osorio
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaMichel Graciano
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilDanilo Sato
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPSérgio Vilar
 
Resumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer
Resumo Anotacoes Certificacao OCE WebLogic Portal 10g DeveloperResumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer
Resumo Anotacoes Certificacao OCE WebLogic Portal 10g DeveloperGilberto Holms
 
Propagação de Identidades
Propagação de IdentidadesPropagação de Identidades
Propagação de Identidadesacsvianabr
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEMarco Antonio Maciel
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"sbcars
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 

Semelhante a CDI Introdução e Conceitos (20)

TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
 
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileJava CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações Java
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Mini curso JBC
Mini curso JBCMini curso JBC
Mini curso JBC
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHP
 
Resumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer
Resumo Anotacoes Certificacao OCE WebLogic Portal 10g DeveloperResumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer
Resumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer
 
Maven 2
Maven 2Maven 2
Maven 2
 
Propagação de Identidades
Propagação de IdentidadesPropagação de Identidades
Propagação de Identidades
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 

Mais de Dr. Spock

Improving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific LanguageImproving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific LanguageDr. Spock
 
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...Dr. Spock
 
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemEvitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemDr. Spock
 
Workshop de Introdução ao ScrumToys
Workshop de Introdução ao ScrumToysWorkshop de Introdução ao ScrumToys
Workshop de Introdução ao ScrumToysDr. Spock
 
TDC2011: Spring Mobile
TDC2011: Spring MobileTDC2011: Spring Mobile
TDC2011: Spring MobileDr. Spock
 
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvensTDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvensDr. Spock
 
TDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseTDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseDr. Spock
 
TDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureTDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureDr. Spock
 
Spring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvelSpring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvelDr. Spock
 
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft AzureDesafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft AzureDr. Spock
 
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer FacesPerformance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer FacesDr. Spock
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDr. Spock
 
Computação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaComputação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaDr. Spock
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkDr. Spock
 
Produtividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App EngineProdutividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App EngineDr. Spock
 
Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!Dr. Spock
 
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesSpring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesDr. Spock
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDr. Spock
 
Computação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma JavaComputação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma JavaDr. Spock
 
Os 5 Níveis de Reuso
Os 5 Níveis de ReusoOs 5 Níveis de Reuso
Os 5 Níveis de ReusoDr. Spock
 

Mais de Dr. Spock (20)

Improving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific LanguageImproving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific Language
 
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
 
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemEvitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
 
Workshop de Introdução ao ScrumToys
Workshop de Introdução ao ScrumToysWorkshop de Introdução ao ScrumToys
Workshop de Introdução ao ScrumToys
 
TDC2011: Spring Mobile
TDC2011: Spring MobileTDC2011: Spring Mobile
TDC2011: Spring Mobile
 
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvensTDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
 
TDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseTDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software Enterprise
 
TDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureTDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & Azure
 
Spring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvelSpring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvel
 
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft AzureDesafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
 
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer FacesPerformance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSF
 
Computação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaComputação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e Java
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do Framework
 
Produtividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App EngineProdutividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App Engine
 
Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!
 
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesSpring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSF
 
Computação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma JavaComputação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma Java
 
Os 5 Níveis de Reuso
Os 5 Níveis de ReusoOs 5 Níveis de Reuso
Os 5 Níveis de Reuso
 

CDI Introdução e Conceitos

  • 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
  • 3.
  • 4. Agenda • Introdução e conceitos • Principais recursos • Demonstração • Q&A
  • 5. Introdução & Conceitos
  • 6. O que é CDI?
  • 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.”
  • 8. Características • Type-safe; • Orientado a anotações; • Consistente; • Portável; • Turbina o modelo de componentes do Java EE.
  • 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.
  • 12. Origens do CDI JSR-299 JSR-330 Web Beans Dependency Injection for Java
  • 13. Origens do CDI JSR-299 JSR-330 Contexts and Dependency Injection Dependency Injection for Java EE for Java
  • 14. Origens do CDI JSR-299 JSR-330 Contexts and Dependency Injection Dependency Injection for Java EE for Java
  • 17. CDI no Java EE 6
  • 18. CDI no Java EE 6
  • 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.
  • 25. Principais Recursos • Managed Bean • Injection • Contexts • Qualifiers • Events • Alternatives
  • 26. Principais Recursos • Specializations • Producers/Disposers • Stereotypes • Interceptors • Decorators • Portable Extensions (SPI)
  • 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
  • 29. Contextos @ManagedBean @RequestScoped public class CaixaEletronicoManager { • JSR-220 // ... } • @javax.enterprise.context.RequestScoped • @ConversationScoped • @SessionScoped • @ApplicationScoped • @Dependent
  • 30.
  • 31.
  • 32.
  • 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. }
  • 34. 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 {}
  • 35.
  • 36. Eventos • Permite desacoplar componentes; public class ComponenteA { @Inject private ComponenteB dependencia; }
  • 37. Eventos • Permite desacoplar componentes; • O CDI gerencia a propagação de eventos;
  • 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. } }
  • 41.
  • 43. 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