Spring兩大核心之IOC
阿新 • • 發佈:2021-09-01
IOC
推導
Dao層分別定義了一個介面(UserDao),三個實現方法,按照普通的呼叫方式,即為UserDao dao = new 其中的一個方法,如果使用者的需求發生變化,想使用三個實現方法中的另外一個,則需要程式設計師修改程式碼。
如果在UserService層新增一個set方法UserDao的一個方法,將建立物件的方式交給使用者選擇,這樣就比較靈活。
在整個的過程中,第一步的new物件的控制權是在程式設計師手中,而添加了set方法後,new物件的控制權是在使用者手中。 即控制權發生了反轉。
本質
控制反轉IOC(Inversion of Control)是一種設計思想。
在使用面向物件程式設計中,物件的創建於物件的依賴關係完全硬編碼在程式中,物件的建立由程式自己控制,控制反轉後將物件的建立轉移給第三方,即獲得依賴物件的方式反轉了
實現
控制反轉是一種通過描述(XML或註解)並通過第三方去生產或獲取特定物件的方式,在Spring中實現控制反轉的是IOC容器,實現方式是依賴注入(Dependency Injection,DI)
理解
控制
:誰來控制物件的建立,傳統應用程式是有程式本身來控制建立,使用Spring後,物件由Spring來建立
反轉
:程式本身不建立物件,而變成被動的接收物件
依賴注入
:即利用set方來進行注入IOC是一種程式設計思想,由主動的建立程式設計被動的接收。
可通過該newClassPathXmlApplicationContext去檢視底層原始碼
小結
:物件由Spring來建立,管理,裝配。
IOC建立物件的方式
- 預設是無參建構函式建立物件
- 有參構造
- 下標賦值
- 通過型別賦值(不建議使用)
- 直接通過引數名賦值
依賴注入
依賴
:bean物件的建立依賴於容器
注入
:bean物件中的所有屬性,由容器來注入方式:
構造器注入
Set方法注入
(可注入型別)
- bean
- ref
- idref
- list
- set
- map
- properties
- value
- null
其他注入
- P名稱空間(properties)
- C名稱空間(construction)
兩者的使用都需要匯入對應的名稱空間
Bean的作用域
singleton
單例 (預設)prototype
原型- request (Web中使用)
- session (Web中使用)
裝配方式
- 在XML中顯式的配置
在XML中隱式的配置
(註解開發的基礎,核心屬性autowire,兩種方式byName和byType)- 在Java中顯式的配置