Pergunta

Eu notei em várias páginas da web que aparentemente a Spring 3.0 suporta @Inject do JSR-330. Como gostaríamos de usar a sintaxe do JSR-299 para injeção de dependência em nossas bibliotecas para aplicativos da Web e aplicativos independentes e ter alternativas para soldar, seria bom se a primavera pudesse fazer isso.

Sendo um novato na primavera, tentei baixar a distribuição da estrutura da primavera e coloquei todos os frascos no caminho da construção do Eclipse. Nenhuma anotação de injeção, portanto, meu projeto de teste existente usando a Weld não compilou.

Isso pode ser feito com a primavera? O que eu preciso fazer para fazer isso em funcionamento?

(Estou ciente de que Guice finalmente apoiará isso também. É apenas no SVN por enquanto e, se houver um lançamento oficial da primavera que possa, isso seria melhor.)


Pode ser feito. O jar JSR-330 deve ser baixado separadamente, e o CGLIB para analisar as classes @Configuration escrito manualmente, além de uma implementação de registro do Commons.

A maior diferença da solda parece ser que a fiação precisa ser escrita manualmente em vez de encontrada magicamente (um pouco mais pesada, mas pode fazer aplicativos mais robustos), além do tempo de inicialização é muito menor. Ainda sou novo na primavera - existe uma maneira de ter as classes @Configuration aputadas?

Foi útil?

Solução

De Documentação de referência da primavera 3.0.x:

A anotação @Inject do JSR 330 pode ser usada no lugar do @Autowired nos exemplos abaixo. O @Inject não possui uma propriedade necessária, diferentemente da anotação @Autowire da Spring, que possui uma propriedade necessária para indicar se o valor injetado é opcional. Esse comportamento é ativado automaticamente se você tiver o jar JSR 330 no caminho de classe.

Assim, você pode tornar seu código agnóstico da estrutura DI usando @Inject, mas ainda precisa incluir um frasco com o javax.inject Aulas em seu projeto porque a primavera não as envia. Você pode encontrar o frasco relevante na seção de downloads em Site do código do Google do JSR-330.

Outras dicas

o javax.inject O pacote não está incluído como parte da primavera 3, mas suporta se estiver presente.

Se você olhar para a fonte para AutowiredAnnotationBeanPostProcessor, você verá o construtor usa reflexão para localizar javax.inject.Inject, e registra uma mensagem se encontrar. Não há dependência de tempo de compilação nisso.

Você precisará localizar os frascos JSR-330 de alguma outra fonte (por exemplo, o Javaee 6 SDK).

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