• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

CDI – Context Dependency Injection – Histórico

February 19, 2018 by Mauda Leave a Comment

Conteúdo do Post:
  1. CDI – definição
  2. Origens do CDI
  3. Seam Framework e a JSR-299
  4. Spring Framework e a JSR-330
  5. Resumo da Opera das JSRs
  6. Pequeno detalhe de padronização de Software
  7. CDI 2.0
  8. finnaly{

Olá Pessoal, tudo bom?

No artigo de hoje iremos ver um pouco da história do CDI. Veja na continuação desse artigo.

CDI – definição

A sigla CDI significa Context Dependency Injection for Java EE.

A injeção de dependência nada mais é do que deixar a especificação assumir qual seria a forma de instanciar um objeto de uma determinada classe.

Por exemplo, em um projeto que não use CDI, provavelmente foi utilizado alguns conceitos de singleton e factory. O CDI ajuda a remover esse tipo de conceito do sistema. Não estou dizendo que utilizar os padrões seja ruim, muito pelo contrário, é que algumas tarefas se tornam bem mais simples utilizando especificações que no fim das contas irão realizar a mesma atividade.

Origens do CDI

A história do CDI é dividida em duas partes. A primeira com Gavin King e o Seam Framework e a segunda com Rod Johnson e o Spring Framework.

Seam Framework e a JSR-299

Em 2005, Gavin King (criador também do Hibernate) cria o Seam Framework em sua versão 1.0. Esse framework tem o objetivo de reduzir a complexidade de operações de Injeção de Dependência nos projetos que utilizavam JSF (Java Server Faces) e EJB (Enterprise Java Beans).

No ano de 2007, o Seam passou a ter uma versão 2.0, o qual foi o rascunho da JSR-299 (JSR-299: Contexts and Dependency Injection for the JavaTM EE platform) ((JSR-299 – link)). Em sua versão 2.0 também o Seam passou a trabalhar com Web Beans ((Web Beans Specification – link)) o qual é uma classe Java que contém regras negociais, mas que pode ser acessada via código Java ou Expression Language. No ano de 2009 a JSR-299 tem fechada a sua versão final.

Spring Framework e a JSR-330

Em 2004, Rod Johnson cria o Spring Framework na versão 1.0. Esse framework tem o objetivo de reduzir a complexidade do container JEE (Java Enterprise Edition)

No ano de 2007, tem-se o inicio do rascunho da JSR-330 (JSR 330: Dependency Injection for Java) ((JSR-330 – link)). A qual teve sua versão final no ano de 2009

Resumo da Opera das JSRs

Legal. O java passou a possuir duas especificações para Injeção de Dependência:

  • JSR-299: Contexts and Dependency Injection for the JavaTM EE platform
  • JSR 330: Dependency Injection for Java

A pergunta é: Pra que? Ambas não especificam a mesma coisa?

A resposta é: Sim! e Não também!

A relação entre as especificações JSR-299 e JSR330 está como o JPA (Java Persistence API) e o JDBC (Java Database Connectivity). O JPA utiliza-se do JDBC, pois o JDBC é a especificação responsável por conversar com o banco de dados. Porque então o JPA iria reinventar a roda? Logo ele faz o trabalho dele, automatizar a relação entre entidades e tabelas, mas para a comunicação com o banco de dados utiliza-se do JDBC.

Aqui é a mesma coisa, a JSR 330 contextualiza a injeção de dependência dentro da Linguagem Java, já a JSR-299 utiliza-se da JSR-330 para realizar o seu trabalho de injeção dependência dentro do contexto JEE.

Pequeno detalhe de padronização de Software

Entendido o aspecto das JSRs, mas ainda temos dois frameworks que fazem essa injeção de dependências, qual deles se tornou o padrão da especificação? Como é o Hibernate Validator para a especificação de Bean Validation. No caso do CDI foi criado um novo framework chamado JBoss Weld. Algumas das atividades realizadas pelo JBoss Weld e CDI em geral:

  • Uma forma de prover e gerar objetos com estado (stateful)
  • Injeção de dependências com type-safe, ou seja, trazer objetos do tipo desejado, sem serem de outros formatos.
  • Injeção de dependências para diferentes ambientes (desenvolvimento, homologação, produção) sem a necessidade de configurações complexas
  • Integração com Expression Languages, podendo ser utilizada com JSP e JSF.
  • Notificação de eventos
  • Criação de Interceptors
  • Capacidade de prover uma SPI (Service Provider Interface), podendo criar novas extensões a especificação.

CDI 2.0

Atualmente existe uma nova JSR para o CDI, chamada de CDI 2.0 ou JSR 365: Contexts and Dependency Injection for JavaTM 2.0 ((JSR-365 – link)), que é a atualização e união das JSR 299 e JSR 330.

Essa JSR está atualizada para a versão do JEE 8.0 e sua versão final saiu em maio de 2017. A documentação oficial se encontra no seguinte link.

As principais mudanças foram:

  1. A divisão da especificação em 3 partes: CDI Core, CDI SE e CDI JEE.
  2. Melhorias na programação Assíncrona.
  3. Interfaces de configuração facilitando a mudança de informações on the fly.
  4. Factory para a criação de interceptadores
  5. Adição das principais funcionalidades do Java SE 8, como lambda e streams.

finnaly{

Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

Filed Under: Arquitetura, Java Tagged With: cdi, histórico, seam, weld

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in