Injeção de dependência com @Inject em solda (JSR-299 RI). Como os @produces correspondentes são encontrados?

StackOverflow https://stackoverflow.com/questions/2574304

Pergunta

Eu joguei com a implementação de referência do JSR-299 "Weld" com o objetivo de usá-lo em um aplicativo independente, e dei uma olhada na documentação e me maravilhei com o Magic.

Minha pergunta é Como as O produtor de um determinado objeto a ser @injetado é encontrado?

O compilador Java produz dicas para anotações que é facilmente encontrado pelo carregador de classe, ou o caminho de classe completo deve ser percorrido carregando todas as classes para ver o que elas fazem, o que me parece altamente ineficiente, ou é uma abordagem completamente diferente.

Qual é o truque?

Foi útil?

Solução

O caminho de classe é digitalizado para "Arquivos de Bean". Arquivos de feijão são aquelas bibliotecas que contêm META-INF/beans.xml. Todos os grãos nesses arquivos são automaticamente registrados com o BeanManager e suas anotações são analisadas e armazenadas. Sempre que um produtor é necessário, o gerente de feijão é consultado sobre produtores elegíveis

Outras dicas

Suponho que funcione da mesma forma: na qual o caminho de classe é realmente digitalizado. O Impl também procurará o @produce com o menor escopo correspondente, para que você possa ter, por exemplo, um produto no nível da sessão para usuários registrados e outro no nível do aplicativo para usuários anônimos.

Não sei, mas esse @inject parcialmente feito pelo pai de Hibernate foi finalmente reformulado/influenciado no final por Springsource e Google. Talvez funcione um pouco como Guice?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top