1. 程式人生 > >IOC和DI

IOC和DI

運行時 face lazy 異常 mic blog 依賴 操作 ges

IOC 開發基本步驟:
1.導jar包
2.編寫實體類
3.編寫XML文件
4.啟動Spring容器
5.通過Spring容器來獲取對象,並通過對象執行實際操作

Spring 獲取對象的方式:(2種)
1.通過id
-- getBean("bean中的id值");
2.通過class
-- getBean("xx.class");
-- 此種方法最終還是通過id值來獲取對象。使用class類型可能會出現一對多的現象。容易出現異常。

Spring 創建對象的方式:(4種)
1.默認的無參構造方法創建對象;


-- 底層是調用無參構造函數,通過Java中的反射機制來創建對象。
2.Spring工廠創建對象:
-- 需要實現FactoryBean<T>接口,並實現其中的方法

技術分享

技術分享
3.靜態工廠創建對象:
-- 用來創建一些不能直接創建的類,比如abstract或者interface等。
-- 要求必須在方法上加上 static 關鍵字。在XML配置Bean標簽中需要添加factory-method屬性,該屬性指向實現的方法。
-- 工廠類不會被實例化。
-- 在運行時,若沒有出現static關鍵字,必然會有異常出現。

技術分享


4.實例工廠創建對象:
-- 先創建實例工廠對象。
-- 再通過實力工廠對象調出對象中的方法。factory-Bean="實例工廠的id" factory-method="方法名"

技術分享

Spring中對象的單例和多例
scope="singleton" -- 設為單列
scope="protoType" -- 設為多例

單例:在內存中對象有且只有一份

發現:
在spring容器中,默認創建的對象都是單例的。
在spring容器中默認使用單例對象便於維護。

註意:
如果對象是多例對象.spring容器只負責對象的創建,不負責維護.具體的生命周期由使用者決定.


如果對象是單例的,那麽Spring容器維護它的生命周期,生命周期基本和容器一致.


懶加載:
在對象被使用時再創建對象,而不是傳統的提前創建對象,這樣大大浪費資源。
使用規則:在配置對象的Bean標簽中添加一個 lazy-init 屬性。
-- 該屬性有三個值:lazy-init="default/false/true"; 在沒有添加該屬性時就是default或false值。
-- 若需要在所有的對象中使用懶加載則在Beans父標簽最後添加該屬性。lazy-init="true"
註意:在lazy-init和scope一起使用時,若scope設為了多例時,lazy-init的值不管是false還是true懶加載都會生效。
因為在多例時,對象就是在調用時再去創建對象並覆蓋原先的對象。

技術分享

自定義的初始化和銷毀方法:

技術分享

  整個spring中對象的簡單生命周期劃分為4部分(整個spring容器中對象的生命周期經歷了12個過程)

    1.對象實例化

    2.調用初始化方法

    3.對象完成特定的操作

     4.對象銷毀.

Spring中的DI:表示依賴註入.

  依賴註入的方式:

    1.set方法註入 必須要有set方法

    2.構造方法註入

Spring中IOC和DI的意義:

  1.能夠將程序中間層對象的創建過程簡化了,都交給spring容器來完成.

  2.Spring中使用IOC和DI能夠將軟件中的耦合性降低.

IOC和DI