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