Estou tentando entender o javax.inject
pacote e não estou certo para que a javax.inject.Named
anotação deve ser usada. O Javadoc não explica a ideia por trás dele.
Javadoc está em http://download.oracle.com/javaee/6/api/javax/inject/Named.html
Estou usando o Spring 3.0 para escrever alguns programas de amostra, ao colocar @Named
um bean parece adicioná-lo à fábrica de bean, mas a descrição do Javadoc é tão leve que não posso dizer se esse é o comportamento padrão ou específico do Spring.
Minhas perguntas são:
- Qual é a diferença entre
@Named
e@Qualifier
- Como você deve dizer ao sistema Runtime que uma classe deve ser injetável em outras classes qual é a anotação para isso? O equivalente a
@Component
na primavera?
Atualização 1, há uma excelente explicação de @Named
e @Qualifier
no artigo de Nice sobre @Named
e @Qualifier
https://dzone.com/articles/java-ee6-cdi-named-components agradece a @xmedeko pelo link para o comentário abaixo.
Respostas:
Use
@Named
para diferenciar entre diferentes objetos do mesmo tipo vinculados no mesmo escopo.Sem o
@Named
qualificador, o injetor não saberia por quanto tempo vincular a qual variável.Se você deseja criar anotações que agem como
@Named
, use a@Qualifier
anotação ao criá-las.Se você olhar
@Named
, ele próprio está anotado com@Qualifier
.fonte
@Named
e@Qualifier
java.dzone.com/articles/java-ee6-cdi-named-components@Inject
em vez de Spring@Autowired
para injetar um feijão.@Named
em vez de Spring@Component
para declarar um bean.Essas anotações padrão JSR-330 são verificadas e recuperadas da mesma maneira que as anotações Spring (contanto que o seguinte
jar
esteja em seu classpath)fonte
Em relação ao nº 2, de acordo com a especificação JSR-330:
Portanto, cabe ao provedor determinar quais objetos estão disponíveis para injeção. No caso da primavera, são todos os feijões da primavera. E qualquer classe anotada com anotações JSR-330 são automaticamente adicionadas como beans Spring ao usar um AnnotationConfigApplicationContext.
fonte
A função principal da anotação @Named é definir um bean com o propósito de resolver instruções EL dentro do aplicativo, geralmente por meio de resolvedores JSF EL. A injeção pode ser realizada usando nomes, mas não era assim que a injeção no CDI deveria funcionar, já que o CDI nos fornece uma maneira muito mais rica de expressar os pontos de injeção e os grãos a serem injetados neles.
fonte