劉雙
摘要
傳統程序設計中,程序需要經過手動的方式來獲取被依賴的對象,而spring采用控制反轉模式,該模式使用容器來自動獲取,完美地克服了傳統模式的弊端。本文對Spring框架中10C模式的具體實現進行研究與分析。
【關鍵詞】控制反轉 IOC Spring
1 IoC模式類型
1.1 Method注入方式
當調用的方法需要依賴某些對象時,那么該方法的參數就是需要傳遞的對象。在這種方式中,被依賴的對象和調用者無法建立組合關系,調用者僅需要在注入被依賴對象的方法中,使用被依賴對象進行特定的操作即可。
1.2 接口注入方式
聲明依賴的方式有很多,如常用的Serviceable,Configurable等接口。接口中往往是一些抽象方法,調用者類需要實現接口中的抽象方法,在抽象方法中編寫被依賴對象被注入的方式。
1.3 設值注入方式
setter方法可以很輕易的對被依賴對象進行設置。在調用這類中,會有一個和被依賴對象有相同類型的成員變量,使用設值注入可以將被依賴的setter方法傳遞到IOC容器當中,同時將被依賴對象傳給相應的成員變量。
1.4 構造注入方式
使用構造器來聲明依賴。在調用者類中,會實現一個帶有被依賴對象為形參的構造器,IoC容器在初始化該調用者對象前,首先初始化被依賴對象。初始完成后,將調用者對象相應的構造器注入被依賴對象,通過構造函數將被依賴對象賦值給指定的成員變量。
2 Spring基礎知識
Spring容器可用于在spring中實現控制反轉,也被稱為依賴注入。在spring中所有java對象的創建和管理都是由spring對象實現,其中所有的Java對象都被叫做Bean。開發者需要使用配置文件或注解向Spring容器注冊Bean。Spring容器有兩種:BeanFactory和ApplicationContext。
其中,ApplicationContext接口是BeanFactory接口的子接口,ApplicationContext對BeanFactory的功能進行了擴展,其中包括:預先初始化單例類,增加了事件機制等。
3 Spring實現IoC
Spring支持設值注入和構造注入兩種方式的IoC。在Spring中配置IoC有兩種方式:
(1)使用配置文件方式,開發者需要在配置文件中配置相應的Bean,在這種情況下當Spring容器在加載時,便會讀取配置文件并將配置文件中的Bean實例化為Java對象;
(2)使用@Autowired注解,該注解按照byType的方式進行匹配,依賴注入的方式與配置文件相似,本文不做詳細介紹。
使用配置文件方式,需要在Spring的配置文件內配置Bean的信息,可將id來作為Bean唯一的標識,Bean的具體實現類可以使用class來指定,下文會有詳細介紹。
4 Spring中IOC的具體實現
下面通過配置文件實現設值注入為例進行介紹。
4.1 創建模型
假設模型:系統類(system),以及系統要依賴的組件類(Component),如下:
public class System{//系統類
private String name;
private Component component;//依賴組件
//get/set方法略
}
public class Component{//組件類
private String name;
//get/set方法略
}
4.2 設值注入
Spring容器使用成員變量的setter方法來注入被依賴對象,即設值注入。在配置文件中需要為Bean元素配置property元素,每一個property驅動Spring容器執行Bean的setter方法一次。
property有如下屬性:
name:對應類的某一個setter方法;
value:驅動程序將此屬性等號右邊的字面值傳入setter方法中;
ref:驅動程序查找Spring容器中id與此屬性等號右邊字符串相同的Bean。
以下是配置文件的具體代碼:
Spring容器在啟動時,首先讀取配置文件,檢查是否有Bean定義。程序讀取id為system的Bean后,對實現類System類進行檢測,并且通過設值注入為該system Bean注入兩個屬性。
程序根據反射機制獲得相應類的對象,調用類對象的newlnstanceo方法獲取System類的對象。由property屬性的name參數解析到,程序需要調用setName方法來為System對象注入windows值,同時為component參數注入此配置文件中的另一個Bean,之后實例化component Bean。實例化完成后,通過setcomponent()將component對象注入System對象,到此整個system Bean的實例化工作便完成了,系統以此Bean的配置id作為鍵,將其放入Spring容器中,等待程序的獲取。
5 結論
綜上,大致介紹了IoC模式的四種實現方式,以及Spring配置文件的配置信息,同時也了解了Spring中IoC的兩種實現方式,并以setter(設值)注入為例,介紹了具體的實現過程,對于IOC的整體研究有一定的價值。
參考文獻
[1]顧悅,王建軍.Spring ActionScript中IoC容器注入機制研究[J].電腦知識與技術,2010,06(28):8033-8034.
[2]薄奇,許林英.Spring框架中IoC的實現[J].微處理機,2008,29(01):147-149.