我們在使用ssh整合項(xiàng)目的時候,Spring在其中是一個非常重要的框架,它在其中可以說是一個最核心的框架,提到spring我們不得不提它的IOC容器的功能了!它是一個大工廠,可以在其中產(chǎn)生和管理很多的bean,下面,請隨阿堂一起來好好看看spring的容器功能方面的介紹,這對于我們在解決ssh框架整合中的問題,進(jìn)行測試時是非常有用的!
1.spring容器
Spring有兩個核心接口BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口,它們代表了Spring容器,Spring容器是產(chǎn)生Bean的工廠,用于管理容器中的Bean。Bean是Spring管理的基本單位,在spring的J2EE應(yīng)用中,所有的組件都是Bean。Bean包括數(shù)據(jù)源、Hibernate的SessionFactory、事務(wù)管理器等。
應(yīng)用中的所有組件,都處于spring的管理下,都被spring以Bean的方式管理,spring負(fù)責(zé)創(chuàng)建Bean實(shí)例,并管理其生命周期。Spring里的Bean是非常廣義的概念,任何Java對象和Java組件都被當(dāng)成Bean處理,甚至這些組件,并不是標(biāo)準(zhǔn)的JAVABEAN。
Bean在spring容器中運(yùn)行,無須感受Spring容器的存在,一樣可以接受spring的信賴注入,包括Bean屬性的注入、合作者的注入、信賴關(guān)系的注入等。
spring容器負(fù)責(zé)創(chuàng)建Bean實(shí)例,所以需要知道每個Bean的實(shí)現(xiàn)類,JAVA程序的實(shí)現(xiàn)面向接口編程,無須關(guān)心Bean實(shí)例的實(shí)現(xiàn)。但Spring容器必須能精確知道每個Bean的實(shí)現(xiàn)類,因此Spring配置文件必須精確配置Bean的實(shí)現(xiàn)類。
Spring容器最基本的接口就是BeanFactory.BeanFactory負(fù)責(zé)配置、創(chuàng)建、管理Bean,它有一個子接口ApplicationContext,因此也稱為Spring上下文。Spring容器負(fù)責(zé)管理Bean與Bean之間的信賴關(guān)系。
BeanFactory接口包含如下基本的方法:
public boolean containsBean(String name),判斷Spring容器是否包含id為name的Bean定義
public Object getBean(String name)返回容器id為name的bean
public Object getBean(String name,Class requiredType)返回容器中id為name,并且類型為requiredType的Bean
public Class getType(String name)返回容器中id為name的Bean的類型
調(diào)用者只需使用getBean方法即可獲得指定Bean的引用,無須關(guān)心Bean的實(shí)例化過程,即Bean實(shí)例的創(chuàng)建過程完全透明。
BeanFactory有很多實(shí)現(xiàn)類,通常使用org.springframework.beans.factory.xml.XmlBeanFactory類。但對于大部分J2EE應(yīng)用而言,推薦使用ApplicationContext. ApplicationContext是BeanFactory的子接口,其常用實(shí)現(xiàn)類是
org.springframework.context.support.FileSystemXmlApplicationContext和
org.springframework.context.support.ClassXmlAplicationContext.
創(chuàng)建 BeanFactory實(shí)例時,必須提供Spring容器管理的Bean的詳細(xì)配置信息。Springr的配置信息通常采用XML配置文件來設(shè)置,因此,創(chuàng)建BeanFactory實(shí)例時,應(yīng)該提供XML配置文件作為參數(shù)。XML配置文件通常使用Resource對象傳入
Resource接口用于訪問配置文件資源
大部分j2ee應(yīng)用,可在啟動web應(yīng)用時自動加載ApplicationContext實(shí)例,接受Spring管理的Bean無須知道ApplicationContext的存在,一樣可以利用ApplicationContext的管理。
對于獨(dú)立的應(yīng)用程序,也可以通過如下方法來實(shí)例化BeanFactory
//搜索當(dāng)前文件路徑下的beans.xml文件創(chuàng)建Resource對象
InputStreamResource isr=new FileSystemResource(is);
//以Resource對象作為參數(shù),創(chuàng)建BeanFactory的實(shí)例
XmlBeanFactory factory=new XmlBeanFactory(isr);
或者采用如下方法
//搜索CLASSPATH路徑,以CLASSPATH路徑下的beans.xml文件創(chuàng)建Resource對象
ClassPathResource res=new ClassPathResource("beans.xml");
//以Resource 對象作為參數(shù),創(chuàng)建BeanFactory實(shí)例
XmlBeanFactory factory=new XmlBeanFactory(res);
如果應(yīng)用里有多個屬性配置文件,則應(yīng)該采用BeanFactory的子接口ApplicationContext來創(chuàng)建BeanFactory的實(shí)例,ApplicationContext通常采用如下兩個實(shí)現(xiàn)類。
FileSystemXmlApplicationContext ,以指定路徑的XML配置文件創(chuàng)建ApplicationContext
ClassPathXmlApplicationContext,以CLASSPATH路徑下的XML配置文件創(chuàng)建ApplicationContext
如果需要同時加載多個XML配置文件,可以采用如下方式
//搜索CLASSPATH路徑,以CLASSPATH路徑下的applicationContext.xml 和 service.xml文件創(chuàng)建ApplicationContext
ClassPathXmlApplicationContext appContext=new ClassPathXmlApplicationContext(
new String[] {"applicationContext.xml","service.xml"});
//事實(shí)上,ApplicationContext是BeanFactory的子接口,支持強(qiáng)制類型轉(zhuǎn)換
BeanFactory factory=(BeanFactory) appContext;
當(dāng)然,也可以支持從指定的路徑來搜索特定文件加載:
//以指定路徑下的applicationContext.xml和service.xml文件創(chuàng)建 Applicationcontext
FileSystemXmlAplicationContext appContext=new
FileSystemXmlApolicationContext(
new String[] {"applicationContext.xml","service.xml"}
)
//事實(shí)上,ApplicationContext是BeanFactory的子接口,支持強(qiáng)制類型轉(zhuǎn)換
BeanFactory factory=(BeanFactory) appContext;
2.使用ApplicationContext
很多時候,并不是直接使用BeanFactory實(shí)例作為Spring容器,而是使用ApplicationContext實(shí)例。因此,有時候也稱Spring容器為Spring上下文。ApplicationContext是BeanFactory接口的子接口,它增強(qiáng)了BeanFactory的功能。
ApplicationContext允許以聲明方式操作容器,無須手動創(chuàng)建它??衫萌鏑ontextLoader的支持類,在web應(yīng)用啟動自動創(chuàng)建ApplicationContext。當(dāng)然,也可以采用編程方式創(chuàng)建ApplicationContext
ApplicationContext繼承MessageSource接口,因此提供國際化支持資源訪問,比如 URL和文件
事件傳遞
載入多個配置文件
ApplicationContext包括 BeanFactory的全部功能,因此建議優(yōu)先使用ApplicationContext ,除了對于某些內(nèi)存非常關(guān)鍵的作用,才考慮使用BeanFactory
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。