Injeção de dependência com @Inject em solda (JSR-299 RI). Como os @produces correspondentes são encontrados?
-
24-09-2019 - |
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?
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?