Почему @resource может найти все классы, реализующие интерфейс, и внедрить их в виде списка - PullRequest
0 голосов
/ 03 января 2019

Я хочу добавить список в мое приложение. Мой код любит это:

interface A;
class B implements A;
class C implements A;

class D {
    @Resource
    private list<A> list;
}

Чтобы ввести list, я собирался настроить список в xml ,, но обнаружил, что мне это не нужно. и список уже введен в приложение, когда я использую @resource, я хочу знать, как @resource работает здесь.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Аннотация @Resource сообщает Spring, чтобы он смотрел в контексте приложения любой бин, соответствующий требуемому типу, и вставлял его в переменную.

В вашем случае указание поля в виде List<A> будет указывать Spring, что вы хотите вводить все бины типа A.

Spring поддерживает следующую аннотацию для DI:

  • @Resource спецификации JavaEE для инъекций на основе имени ресурса
  • @Inject, спецификации JavaEE, совместимость кода
  • @Autowired, пружинный счетчик @ Inject
0 голосов
/ 03 января 2019

Это то же самое, что и @Autowired, который используется для внедрения зависимостей.

Различия в том, что @Resource - это стандартная аннотация Java (из JSR-250), которую Spring также поддерживает для инъекции.

Я лично использую @Autowired только @Resourceподдерживает вставку полей и сеттера, в то время как @Autowired поддерживает больше, таких как внедрение конструкторов и методов с несколькими аргументами.

...