Institucional

  • Sobre nós
  • Trabalhe Conosco
  • Para Empresas
  • Para Escolas
  • Política de Privacidade
  • Compromisso de Integridade
  • Termos de Uso
  • Canal de Ética
  • Código de Ética
  • Fale Conosco
  • Documentos Institucionais
  • Status
Institucional
  • Sobre nós
  • Trabalhe Conosco
  • Para Empresas
  • Para Escolas
  • Política de Privacidade
  • Compromisso de Integridade
  • Termos de Uso
  • Canal de Ética
  • Código de Ética
  • Fale Conosco
  • Documentos Institucionais
  • Status

A Alura

  • Como Funciona
  • Inteligência Artificial
  • Plataforma
  • Depoimentos
  • Instrutores(as)
  • Dev em <T>
  • Luri, a Inteligência Artificial da Alura
  • IA Conference
  • Cursos Imersivos
  • Perguntas Frequentes
A Alura
  • Como Funciona
  • Inteligência Artificial
  • Plataforma
  • Depoimentos
  • Instrutores(as)
  • Dev em <T>
  • Luri, a Inteligência Artificial da Alura
  • IA Conference
  • Cursos Imersivos
  • Perguntas Frequentes

Conteúdos

  • Alura Cases
  • Imersões
  • Artigos
  • Podcasts
  • Artigos de educação corporativa
Conteúdos
  • Alura Cases
  • Imersões
  • Artigos
  • Podcasts
  • Artigos de educação corporativa
Uma Empresa do GrupoLogo Grupo Alun

Outras empresas do Grupo Alun

  • FIAP
  • STARTSE
  • PM3
  • LUMINA

Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

Redes Sociais & Apps

instagram
youtube
tiktok
x
appStore
googlePlay
Uma Empresa do GrupoLogo Grupo Alun

Outras empresas do Grupo Alun

  • FIAP
  • STARTSE
  • PM3
  • LUMINA

Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

Redes Sociais & Apps

instagram
youtube
tiktok
x
appStore
googlePlay
Alura
  • Home

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    CURSOS

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    CURSOS

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    CURSOS

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    CURSOS

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    CURSOS

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    CURSOS

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    CURSOS

    Ver mais cursos de Inovação e Gestão
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    CURSOS

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    CARREIRAS

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    CURSOS

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    CURSOS

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    CURSOS

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre multiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    • Plus 2430% OFF
    • Pro 2430% OFF
    • Ultra Lab 2430% OFF

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA
  • Artigos
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Carreiras

    Ver todas
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA
    Entrar Ver Planos
  • Área de Interesse

    Entrar Ver Planos
  • Aulas ao Vivo - Skills & Go

    • Agentic Engineering: orquestre multiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA
    Entrar Ver Planos
  • Senioridade

    Entrar Ver Planos
  • Eventos Alura

    • IA Conference
    • Alura Signals
    Entrar Ver Planos
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Artigos
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • Plano Pro 24
    • Plano Plus 24
    • Plano Ultra Lab 24
    • LinkedIn
    • Instagram
    • YouTube
    1. Página inicial
    2. Inovação & Gestão
    3. Trabalhe com CDI extensions

    Trabalhe com CDI extensions

    4 min4 minutos de leitura

    Alura

    4 min4 minutos de leitura

    Publicado: 01/04/2013

    No final do ano passado, implementamos uma integração inicial do VRaptor com CDI. Durante o desenvolvimento tivemos que usar bastante funcionalidades dessa poderosa especificação.  O desafio que tivemos foi o de manter a compatibilidade em relação ao construtor com argumentos do VRaptor. O problema é que todo ponto de injeção para o CDI deve estar marcado com a anotação @Inject, diferente de como é no VRaptor. Abaixo segue um exemplo:

     @Component public class CDIComponent implements ComponentFactory { private final MyRequestComponent component;
    @Inject public CDIComponent(MyRequestComponent component) { this.component = component; }
    public ComponentToBeProduced getInstance() { return new ComponentToBeProduced(); } } 
    

    Só que os usuários do VRaptor estão acostumados a apenas declarar um construtor, receber os argumentos e deixar que o framework se vire para realizar a injeção de dependências. Aí é que está justamente o ponto de customização. Precisamos pegar todas essas classes que possuem construtor com argumentos e avisar ao CDI que ele deve considerar esses construtores como se estivessem anotados com @Inject. Para fazer isso, a especificação fornece diversos pontos de extensão, onde podemos registrar classes novas que não foram previamente scaneadas, excluir classes que não precisamos além de poder alterar as configurações registradas para uma determinada classe.

    Abaixo segue o exemplo da classe que já vamos criar! Para sermos notificados sobre o evento de configuração das classes, vamos utilizar a anotação @Observes, fazendo uso da implementação do Design Pattern Observer, que já é suportado nativamente por qualquer implementação do CDI.

    Banner da Alura convidando profissionais a desenvolver habilidades em inteligência artificial para acompanhar as transformações do mercado de tecnologia. A campanha destaca que quem utiliza IA produz mais, cresce na carreira e se torna mais competitivo, reforçando que a inteligência artificial deixou de ser tendência e passou a ser uma habilidade essencial. O banner incentiva a começar a aprender IA com os cursos da Alura e impulsionar a transformação digital.
     public class AddInjectToConstructorExtension { public void processAnnotatedType(@Observes final ProcessAnnotatedType pat) { //nossa mágica vai entrar aqui } } 
    

    O objeto do tipo ProcessAnnotatedType representa as configurações de uma determinada classe. Uma das coisas que podemos fazer com esse objeto é, por exemplo, saber quais anotações existem em cada elemento da classe. Podemos também adicionar novas informações, por exemplo que a classe tem a anotação @Inject no seu construtor. O primeiro passo é criar um novo objeto do tipo ProcessAnnotatedType, que vai ser o substituto do original. Para não gastarmos tempo implementando isso na mão, vamos usar um projeto da Apache chamado Delta Spike. Ele possui diversas extensões para ajudar em projetos que usam CDI.

     public class AddInjectToConstructorExtension {</pre> public void processAnnotatedType(@Observes final ProcessAnnotatedType pat) { AnnotatedTypeBuilder builder = new AnnotatedTypeBuilder(); //lendo as configurações originais builder.readFromType(pat.getAnnotatedType()); } }
    

    Agora precisamos adicionar a anotação no construtor e informar ao container que ele deve usar essa nova configuração:

     public class AddInjectToConstructorExtension { public void processAnnotatedType(@Observes final ProcessAnnotatedType pat) { AnnotatedTypeBuilder builder = new AnnotatedTypeBuilder(); builder.readFromType(pat.getAnnotatedType()); List<Constructor> constructors = //pega os construtores com argumentos da classe if(hasArgsConstructorAndNoInjection) { Constructor constructor = constructors.get(0); builder.addToConstructor(constructor, new AnnotationLiteral<Inject>() {}); // aqui efetivamente trocamos a configuração que o CDI vai usar ler a classe. pat.setAnnotatedType(builder.create()); } } } 
    

    O código de verificação do construtor foi deixado de fora de maneira proposital, apenas para não perdermos o foco do post. Caso queira dar uma olhada no código completo, basta seguir este link.

    Agora que já temos nossa extensão, vamos aos detalhes menores. Toda extensão no CDI deve implementar a interface de marcação chamada Extension. Basicamente segue a mesma ideia da interface Serializable:

     public class AddInjectToConstructorExtension implements Extension { public void processAnnotatedType(@Observes final ProcessAnnotatedType pat) { AnnotatedTypeBuilder builder = new AnnotatedTypeBuilder(); builder.readFromType(pat.getAnnotatedType()); List<Constructor> constructors = //pega os construtores com argumentos da classe if(hasArgsConstructorAndNoInjection){ Constructor constructor = constructors.get(0); builder.addToConstructor(constructor, new AnnotationLiteral<Inject>() {}); //aqui efetivamente trocamos a configuração que o CDI vai usar ler a classe. pat.setAnnotatedType(builder.create()); } } } 
    

    Também precisamos avisar ao container que ele deve carregar essa nossa extensão, assim como avisamos a um container web que ele deve carregar nosso Listener. Para fazer isso, basta declarar um arquivo chamado javax.enterprise.inject.spi.Extension, dentro de uma pasta chamada services. Essa pasta deve ficar dentro da META-INF.  Agora basta que seja escrito o nome completo de cada classe que representa uma extensão:

     br.com.caelum.vraptor.ioc.cdi.extensions.AddInjectToConstructorExtension br.com.caelum.vraptor.ioc.cdi.extensions.ComponentExtension br.com.caelum.vraptor.ioc.cdi.extensions.ComponentFactoryExtension 
    

    Pronto! Nossa extensão vai ser carregada e todas as configurações de classes que tiverem construtor com argumentos, e não tiverem adicionado a anotação @Inject, vão ser alteradas. Tudo isso de maneira completamente transparente para quem está usando o VRaptor! Em breve, o CDI vai entrar como mais um provider de injeção no VRaptor, juntando-se ao Spring, Guice e Pico.

    Banner da Alura convidando profissionais a desenvolver habilidades em inteligência artificial para acompanhar as transformações do mercado de tecnologia. A campanha destaca que quem utiliza IA produz mais, cresce na carreira e se torna mais competitivo, reforçando que a inteligência artificial deixou de ser tendência e passou a ser uma habilidade essencial. O banner incentiva a começar a aprender IA com os cursos da Alura e impulsionar a transformação digital.

    Avalie este artigo

    Foto de alberto.souza

    Autor(a)

    alberto.souza

    Explore por tópico

    • Mobile
    • Back-end
    • Front-end
    • DevOps
    • UX & Design
    • Dados
    • Gestão & Negócios
    • Inteligência Artificial

    Inscreva-se em nossa Newsletter

    Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.

  • Cibersegurança
  • Cloud
  • Leia também

    • Alura
      21/06/2010

      Noite ágil na Caelum

      Ler mais
    • 03/11/2008

      Integração Contínua e o processo Agile

      Ler mais
    • 18/03/2013

      Kanban além do gerenciamento de software

      Ler mais
    Ver mais conteúdos