- Spring Boot進階:原理、實戰與面試題分析
- 鄭天民
- 483字
- 2022-07-05 09:41:41
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注入適合于可選對象注入;而字段注入是應該被避免使用的,因為對象無法脫離容器而獨立運行。
推薦閱讀
- MySQL 8 DBA基礎教程
- Reactive Programming With Java 9
- GameMaker Programming By Example
- Learning Apache Mahout Classification
- Android程序設計基礎
- Web Development with MongoDB and Node(Third Edition)
- Python Data Analysis Cookbook
- Visual Basic程序設計上機實驗教程
- Python全棧數據工程師養成攻略(視頻講解版)
- Mastering Akka
- PHP+MySQL動態網站開發從入門到精通(視頻教學版)
- Python Deep Learning
- Mastering Android Studio 3
- R語言數據挖掘:實用項目解析
- Scratch編程從入門到精通