@Autowired
anotação é definida na estrutura do Spring.
@Inject
anotação é uma anotação padrão, definida no padrão "Injeção de Dependência para Java" (JSR-330) . O Spring (desde a versão 3.0) suporta o modelo generalizado de injeção de dependência, definido no padrão JSR-330. ( As estruturas do Google Guice e a estrutura do Picocontainer também suportam esse modelo).
Com @Inject
pode ser injetada a referência à implementação da Provider
interface, o que permite injetar as referências adiadas.
Anotações @Inject
e @Autowired
- é quase analogias completas. Assim como a @Autowired
anotação, a @Inject
anotação pode ser usada para propriedades, métodos e construtores de ligação automática.
Ao contrário da @Autowired
anotação, a @Inject
anotação não tem required
atributo. Portanto, se as dependências não forem encontradas - será lançada uma exceção.
Há também diferenças nos esclarecimentos das propriedades de ligação. Se houver ambiguidade na escolha dos componentes para a injeção, o @Named
qualificador deve ser adicionado. Em uma situação semelhante para @Autowired
anotação, será adicionado um @Qualifier
qualificador (o JSR-330 define sua própria @Qualifier
anotação e, através dessa anotação de qualificador, @Named
está definido).