Инъекционные и ресурсные и автообновленные аннотации - программирование
Подтвердить что ты не робот

Инъекционные и ресурсные и автообновленные аннотации

В чем разница между аннотациями @Inject и @Resource и @Autowired?

Когда мы должны использовать каждый из них?

4b9b3361

Ответ 1

Разница между @Inject и @Autowire vs. @Resource?

@Autowired: spring аннотации правдоподобия (в отличие от @Inject и @Resource), которые вводят ресурс по типу, то есть по классу интерфейса интерфейса аннотированного поля или подрядчика, Если у нас мало реализации интерфейса или подкласса, мы можем сузить выбор, используя аннотацию @Qualifier, чтобы избежать двусмысленности. Для ответного соответствия имя bean считается значением квалификатора по умолчанию. Хотя вы можете использовать это соглашение для ссылки на конкретный beans по имени, @Autowired в основном связан с вводом с типом с дополнительными семантическими классификаторами.

@Inject: Аннотации, основанные на JSR-330 (Dependency Injection for Java), идентифицируют конструкторы, методы и поля для инъекций. Эта аннотация является почти полной заменой замены для Spring s @Автоматическая аннотация. Таким образом, вместо использования Spring -специфического @Autowired аннотации вы можете использовать @Inject. Одна из отличий между @Autowired и @Inject заключается в том, что @Inject не имеет требуемого поля, поэтому, если нам не удастся найти подходящий объект для ввода, он будет терпеть неудачу, а @Autowired может использоваться required = false и разрешить поле с нулевым значением (только если необходимо!). Преимущество аннотации @Inject заключается в том, что вместо того, чтобы вводить ссылку напрямую, вы можете попросить @Inject ввести поставщика. Интерфейс провайдера включает, помимо прочего, ленивую инъекцию ссылок bean и вставку нескольких экземпляров bean. Если у нас мало реализации интерфейса или подкласса, мы можем сузить выбор, используя аннотацию @Named, чтобы избежать двусмысленности. @Named аннотация работает так же, как Spring s @Qualifier

@Resource: аннотация, основанная на JSR-250. @Resource очень похож на @Autowired и @Inject, но основное отличие - это пути выполнения, необходимые для поиска требуемого bean для ввода. @Resource сужает поиск сначала по имени, затем по типу и, наконец, по Квалификациям (игнорируется, если совпадение найдено по имени). @Autowired и @Inject сужают поиск сначала по типу, затем по квалификатору и, наконец, по имени.

Ответ 2

В дополнение к @Haim answer есть хорошее описание разницы между Spring и аннотациями JSR-330 (зависимость для Java) и как использовать последнее с Spring.

Ответ 3

|------------|---------------|---------------|---------------|-----------------------|
|            | Setter/Field  | Constructor   | Applicable to | Matching order        |
|            | injection     | injection     | type          |                       |
|------------|---------------|---------------|---------------|-----------------------|
| @Resource  |       X       |               |       X       | Name, Type, Qualifier |
|------------|---------------|---------------|---------------|-----------------------|
| @Autowired |       X       |       X       |               | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Inject    |       X       |       X       |               | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|