3 ответов:
разница между @Inject против @Autowire против @Resource?
@Autowired: spring propriety annotation (в отличие от @Inject и @Resource), которые вводят ресурс по типу, т. е. по классу интерфейса аннотированного поля или подрядчика. В случае, если у нас мало реализации интерфейса или подкласса, мы можем сузить выбор, используя аннотацию @Qualifier, чтобы избежать двусмысленности. Для резервного соответствия имя компонента считается значением по умолчанию значение квалификатора. Хотя вы можете использовать это Соглашение для ссылки на конкретные бобы по имени, @Autowired в основном связан с инъекцией типа с дополнительными семантическими квалификаторами.
@Inject: аннотация на основе JSR-330 (Dependency Injection for Java) определяет инъекционные конструкторы, методы и поля. Эта аннотация является почти полной заменой для аннотации Spring @Autowired. Итак, вместо использования специфичной для весны аннотации @Autowired, вы можете использовать @Inject. Одно из отличий между @Autowired и @Inject заключается в том, что @Inject не имеет требуемого поля, поэтому в случае, если мы не найдем подходящий объект для инъекции, он не будет работать, а @Autowired может использовать required=false и разрешить нулевое поле (только если требуется!). Преимущество аннотации @Inject заключается в том, что вместо того, чтобы вводить ссылку напрямую, вы можете попросить @Inject ввести поставщика. Интерфейс провайдера позволяет, среди прочего, ленивую инъекцию bean ссылки и инъекции нескольких экземпляров Боба. В случае, если у нас мало реализации интерфейса или подкласса, мы можем сузить выбор, используя аннотацию @Named, чтобы избежать двусмысленности. @ Named аннотация работает так же, как @квалификатор весны
@ресурса: аннотация на основе JSR-250. @Resource очень похож на @Autowired и @Inject, но основное различие заключается в путях выполнения, используемых для поиска необходимого компонента для инъекции. @Ресурс будет сузьте поиск сначала по имени, затем по типу и, наконец, по Квалификаторам (игнорируется, если совпадение найдено по имени). @Autowired и @Inject сузят поиск сначала по типу, затем по квалификатору и, наконец, по имени.
|------------|---------------|---------------|---------------|-----------------------| | | Setter/Field | Constructor | Applicable to | Matching order | | | injection | injection | type | | |------------|---------------|---------------|---------------|-----------------------| | @Autowired | X | X | | Type, Qualifier, Name | |------------|---------------|---------------|---------------|-----------------------| | @Inject | X | X | | Type, Qualifier, Name | |------------|---------------|---------------|---------------|-----------------------| | @Resource | X | | X | Name, Type, Qualifier | |------------|---------------|---------------|---------------|-----------------------|Так что весной инъекция зависимости
@Injectи@Autowiredиметь точно такое же поведение.
в дополнение к @Haim ответ есть хорошее описание разницы между Spring и JSR-330 (инъекция зависимостей для Java) аннотации и как использовать последний с Spring.
Comments