Você está na página 1de 15

Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.

br

Disciplina:
Programação para Web II
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

CDI – Context and


Dependency Injection
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

CDI
 Especificação Java (JSR-299);

 Controle de injeção de dependências.

 Implementações: Jboss Weld, Resin CanDI, Apache


OpenWebBeans;

 Permite que seus objetos tenham suas dependências


providas automaticamente;

 O CDI também gerencia o ciclo de vida das


dependências.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Empacotando Aplicações CDI


 Ao implantar uma aplicação Java EE, o CDI procura por
beans dentro de arquivos beans;

 Um arquivo bean é qualquer módulo que contenha


beans que o container CDI pode gerenciar e injetar;

 Há dois tipos de arquivos beans:

◦ Explícitos;

◦ Implícitos.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Arquivo Bean Explícito


 Arquivo com um descritor de implantação beans.xml;

 Ao atributo bean-discovery-mode deve ser atribuído


o valor “all”.

O CDI pode gerenciar e injetar qualquer bean em um arquivo explícito,


exceto aqueles anotados com @Vetoed.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Arquivo Bean Implícito


 Arquivo que contém alguns beans anotados com algum
tipo de escopo;

 Pode ou não conter o arquivo beans.xml;

 Caso haja o beans.xml, o bean-discovery-mode deve


ser “annotated”;

 Em um arquivo implícito, o CDI gerencia apenas os


beans anotados com algum tipo de escopo;

 A partir da versão Java EE7 e CDI 1.1 o arquivo beans.xml


não é mais obrigatório.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Empacotando Aplicações CDI


 Para aplicações Web, o beans.xml, se presente, deve
estar no diretório WEB-INF.

 Para módulos EJB ou arquivos JAR, se presente, o


beans.xml deve estar no diretório META-INF.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

CDI Managed Bean


 É uma classe concreta ou anotada com @Decorator;

 Não pode ser anotada com anotações EJB;

 A Classe deve possuir um construtor sem


parâmetros.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

@Named
 Faz com que o bean se torne gerenciável;
 Permite que o bean seja acessado via linguagem de
expressão.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

@Inject
 Permite a injeção de beans gerenciáveis;
 Cria uma instância da classe anotada;
 Não é necessário fornecer setters e getters.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Pontos de Injeção
 Injeção por parâmetro no construtor do bean;
 Pode haver apenas um construtor injetável no bean.
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Pontos de Injeção
 Injeção por parâmetro em método de inicialização:
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Pontos de Injeção
 Injeção direta de campos:

 Métodos getters e setters não são necessários para injeção


em campo funcionar (exceto com managed beans do JSF).
Professor: Arnaldo Coelho T. Junior arnaldo.junior@ifto.edu.br

Escopos

Você também pode gostar