Статьи

Spicy Spring: разные способы автопроводки

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