@Autowired
аннотация определяется в рамках Spring.
@Inject
аннотация - это стандартная аннотация, которая определена в стандарте «Внедрение зависимостей для Java» (JSR-330) . Spring (начиная с версии 3.0) поддерживает обобщенную модель внедрения зависимостей, которая определена в стандарте JSR-330. ( Фреймворки Google Guice и Picocontainer также поддерживают эту модель).
С @Inject
может быть введена ссылка на реализацию Provider
интерфейса, которая позволяет внедрять отложенные ссылки.
Аннотации @Inject
и @Autowired
- это почти полные аналогии. Помимо @Autowired
аннотации, @Inject
аннотацию можно использовать для свойств, методов и конструкторов автоматической привязки.
В отличие от @Autowired
аннотации, @Inject
аннотация не имеет required
атрибута. Поэтому, если зависимости не будут найдены - будет сгенерировано исключение.
Существуют также различия в уточнениях связующих свойств. Если в выборе компонентов для инъекций существует неопределенность, @Named
следует добавить классификатор. В аналогичной ситуации для @Autowired
аннотации будет добавлен @Qualifier
классификатор (JSR-330 определяет свою собственную @Qualifier
аннотацию и с помощью этого квалификатора @Named
определяется аннотация ).