1. 程式人生 > 其它 >Spring兩大核心之IOC

Spring兩大核心之IOC

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建立物件的方式

  1. 預設是無參建構函式建立物件
  2. 有參構造
    • 下標賦值
    • 通過型別賦值(不建議使用)
    • 直接通過引數名賦值

依賴注入

依賴:bean物件的建立依賴於容器

注入:bean物件中的所有屬性,由容器來注入

方式:

  1. 構造器注入

  2. Set方法注入(可注入型別)

    • bean
    • ref
    • idref
    • list
    • set
    • map
    • properties
    • value
    • null
  3. 其他注入

    • P名稱空間(properties)
    • C名稱空間(construction)

    兩者的使用都需要匯入對應的名稱空間

Bean的作用域

  • singleton 單例 (預設)
  • prototype
    原型
  • request (Web中使用)
  • session (Web中使用)

裝配方式

  • 在XML中顯式的配置
  • 在XML中隱式的配置(註解開發的基礎,核心屬性autowire,兩種方式byName和byType)
  • 在Java中顯式的配置