2016-12-12 5 views
8

Я экспериментировал с примерами из этой официальной весны tutorials и есть зависимость от этого кода:
https://github.com/spring-guides/gs-async-method/tree/master/completeSpring впрыскивает зависимости в конструкторе без @Autowired аннотации

Если вы посмотрите на коде на AppRunner.java класс, у меня есть 2 вопроса:

1) Когда сервер начинает, если я поставил точку останова в конструкторе этого класса, кажется, как в конструкторе GitHubLookupService обеспечивается пружиной, используя @ Сервис bean, который был настроен. НО, не было аннотации @Autowired на конструкторе, так как в мире этот конструктор вызван с правильной зависимостью? Предполагалось, что это будет null.

Это автоматическое предположение Весенняя обувь?
ли весна увидеть «частное поле + конструктор аргумент, и он предполагает, что он должен искать соответствующий боба?
ли Spring Framework или Spring загрузки?
Я пропускаю что-то?

2) Как я помню, было бы целесообразно предоставить конструктор по умолчанию для beans/service и т. Д. Почему этот класс (AppRunner) не имеет конструктора по умолчанию? Как Spring знает, что он должен запускать конструктор с аргументом? Это потому, что это единственный конструктор?

ответ

29

Начиная с весной 4,3, если класс, который сконфигурирован как Spring бин, имеет только один конструктор, то Autowired аннотации могут быть опущена и Spring будет использовать этот конструктор и ввести всю необходимую зависимость.

Что касается конструктора в по умолчанию: Вы либо должны конструктор по умолчанию, конструктор с Autowired аннотацию, когда у вас есть несколько конструкторов, или только один конструктор в классе с или без Autowired аннотацию.

Прочтите главу "@Autowired" из официальной весенней документации для получения дополнительной информации.

+1

Более релевантной ссылкой на документацию будет https://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#beans-autowired-annotation – gkc

Смежные вопросы