Я хотел бы показать различные способы использования аннотации @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; @Component public 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; @Component public 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; @Component public 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 . |