Я хотел бы показать различные способы использования аннотации @Autowired : Constructor , Method и Field autowiring. Все примеры, которые я показываю, представляют собой форму режима byType byType (режим byType сборки constructor аналогичен byType ). Посмотрите справочное руководство Spring для получения дополнительной информации о режимах Autowiring.
Конструктор Автопроводка
Создайте конструктор с зависимым компонентом в качестве параметра конструктора и добавьте аннотацию @Autowired в конструктор. Большим преимуществом автопроводки по конструктору является то, что поле можно сделать окончательным и, следовательно, не может быть изменено после построения.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
package com.jdriven;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class AutowiredCapabilityBean{ //The InjectableBean can be made final private final InjectableBean injectableBean; //The InjectableBean is autowired byType and is required. //An error is thrown when no bean or multiple beans of InjectableBean exist @Autowired public AutowiredCapabilityBean(InjectableBean injectableBean) { this.injectableBean = injectableBean; }} |
Метод автопроводки
Создайте метод установки для зависимого компонента и добавьте аннотацию @Autowired в метод установки. Недостаток использования метода автоматической разводки состоит в том, что в производственном коде может вызываться установщик, который случайно переопределяет компонент.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
package com.jdriven;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class AutowiredCapabilityBean{ private InjectableBean injectableBean; //No explicit constructor is needed. The default constructor is used. //The InjectableBean is autowired byType, but is not required. @Autowired public void setInjectableBean(InjectableBean injectableBean) { this.injectableBean = injectableBean; }} |
Полевая автопроводка
Создайте поле (переменную-член) для зависимого компонента и добавьте аннотацию @Autowired в поле. Этот способ Autowiring имеет меньше кода, но требует больше усилий для тестирования AutowiredCapabilityBean с реализацией AutowiredCapabilityBean , поскольку для него нет конструктора и нет установщика.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
package com.jdriven;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class AutowiredCapabilityBean{ //The InjectableBean is autowired byType and is required. @Autowired private InjectableBean injectableBean; //No explicit constructor is needed. The default constructor is used.} |
| Ссылка: | Spicy Spring: различные способы автопроводки от нашего партнера JCG Виллема Чейзоо в блоге JDriven . |