官术网_书友最值得收藏!

2.1.3 Setter方法注入

先來看一下Setter方法注入的實現代碼,如代碼清單2-7所示。

代碼清單2-7 Setter方法注入示例代碼

public class ClientService {
    private HealthRecordService healthRecordService;

    @Autowired
    public void setHealthRecordService(HealthRecordService healthRecordService) {
        this.healthRecordService = healthRecordService;
    }

    public void recordUserHealthData() {
        healthRecordService.recordUserHealthData();
    }
}

Setter方法注入和構造器注入看上去有點類似,但它比構造函數更具可讀性,因為我們可以把多個依賴對象分別通過Setter方法逐一進行注入。而且,Setter方法注入對于非強制依賴項注入很有用,我們可以有選擇地注入一部分依賴對象。換句話說,該方法可以實現按需注入,幫助我們只在需要時注入依賴關系。

另外,Setter方法可以很好地解決應用程序中的循環依賴問題,如代碼清單2-8所示的代碼是可以正確執行的。

代碼清單2-8 基于Setter方法注入的循環依賴示例代碼

public class ClassA {
    private ClassB classB;

    @Autowired
    public void setClassB(ClassB classB) {
        this.classB = classB;
    }
}

public class ClassB {
    private ClassA classA;

    @Autowired
    public void setClassA(ClassA classA) {
        this.classA = classA;
    }
}

請注意,上述代碼能夠正確執行的前提是ClassA和ClassB的作用域都是Singleton。關于Spring中的對象作用域,我們在本章后續會具體討論。

最后,通過Setter注入可以對依賴對象進行多次重復注入,這在構造器注入中是無法實現的。

作為總結,我們用一句話來概括Spring所提供的三種依賴注入類型:構造器注入適合于強制對象注入;Setter注入適合于可選對象注入;而字段注入是應該被避免使用的,因為對象無法脫離容器而獨立運行。

主站蜘蛛池模板: 长岭县| 馆陶县| 进贤县| 佛坪县| 昌图县| 襄城县| 庆元县| 武宁县| 织金县| 鹤庆县| 林西县| 沁阳市| 建德市| 武义县| 平原县| 青岛市| 临朐县| 文水县| 普兰县| 大理市| 延吉市| 大方县| 同德县| 耒阳市| 宁化县| 清新县| 南陵县| 河曲县| 介休市| 云安县| 兴海县| 历史| 新竹市| 山东| 南丰县| 印江| 同江市| 光泽县| 襄城县| 衢州市| 桦南县|