一??.? 對(duì)于Spring的容器管理,首先得知道什么是容器管理.
??????????java是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,在代碼里,粗略的講一個(gè)對(duì)象的體現(xiàn)就是一個(gè)類(class)的實(shí)例.也可以說(shuō)就是一個(gè)JavaBean.在一個(gè)實(shí)際工程中,像這樣的對(duì)象或?qū)嵗龝?huì)存在很多,并且每個(gè)對(duì)象的狀態(tài),作用范圍,以及它們之間的關(guān)系(在Spring中為依賴)是很復(fù)雜的,所以要管理它們也是很大的開(kāi)銷.而在spring中,對(duì)與它們的管理就是容器管理.你可以看作容器就是這些bean的集合. 管理的方面主要有bean的創(chuàng)建,周期(作用域)和初始屬性(注入),以及bean之間相互依賴的關(guān)系等.用比較專業(yè)的話就是------管理對(duì)象對(duì)其進(jìn)行實(shí)例化、配置以及組裝.
??????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Spring IoC 容器
二 .??容器的運(yùn)作.
??????????????????在Spring包的有兩個(gè)很重要的東西,org.springframework.beans及org.springframework.context包,這兩個(gè)包是IOC的基礎(chǔ)包,自然也是運(yùn)行IOC容器的關(guān)鍵.而其中關(guān)鍵的關(guān)鍵就是分別在兩個(gè)包里的BeanFactory和ApplicationContext,其中BeanFactory提供了配制框架及基本功能,??而
ApplicationContext則是它的擴(kuò)展,這個(gè)擴(kuò)展是針對(duì)企業(yè)級(jí)別的,當(dāng)中加入很多了企業(yè)級(jí)的支持,功能得到了進(jìn)一步增強(qiáng),比如更易與Spring AOP集成、消息資源處理(國(guó)際化處理)、事件傳遞及各種不同應(yīng)用層的context實(shí)現(xiàn)(如針對(duì)web應(yīng)用的WebApplicartionContext).
????1 .?實(shí)例化容器:
???????在項(xiàng)目工程中用于實(shí)例化容器的類一般都是ApplicationContext以及他的擴(kuò)展WebApplicationContext,當(dāng)然BeanFactory也能用.
?????? 在代碼中一般是:
//1.
?Resource?resource?=?new?FileSystemResource("beans.xml");BeanFactory?factory?=?new?XmlBeanFactory(resource);
//2.
ClassPathResource?resource?=?new?ClassPathResource("beans.xml");
BeanFactory?factory?=?new?XmlBeanFactory(resource);
//3.
ApplicationContext?context?=?new?ClassPathXmlApplicationContext(
????????new?String[]{"applicationContext.xml",?"applicationContext-part2.xml"});
//?of?course,?an?ApplicationContext?is?just?a?BeanFactory
BeanFactory?factory?=?(BeanFactory)?context;??
//4.???????????????????ApplicationContext context?= new FileSystemXmlApplicationContext("src\\beans.xml");
?????????????實(shí)際的項(xiàng)目中,上述的實(shí)例化方法一般都是用于非Web工程(c/s)或者測(cè)試代碼中而在web工程內(nèi)一般用的是ApplicationContext,實(shí)例化它只是在web配置文件(web.xml)里寫(xiě)入配置信息:?
???????????????

<context-param>


</context-param>

??? <!--?????????下面的listener 和 servlet 是兩個(gè)相同效果的配置?,只能選其一,只是listener 不能在與Servlet 2.2兼容的web容器中使用,
????????????????? 但在都可用的情況下,官方推崇首選?listener??? -->
<listener>

</listener>

<!--?or?use?the?ContextLoaderServlet?instead?of?the?above?listener???? -->
<servlet>



</servlet>

?????????2.?容器的使用:
????????????一般這是在代碼級(jí)創(chuàng)建了IOC容器后(就是上述的(1)),或者是獲得了容器的"引用"后用(這里其實(shí)是beanFactory和ApplicationContext的實(shí)現(xiàn)類的引用 如:);



???
- boolean containsBean(String) :如果BeanFactory包含給定名稱的bean定義(或bean實(shí)例),則返回true
- Object getBean(String) :返回以給定名字注冊(cè)的bean實(shí)例。根據(jù)bean的配置情況,如果為singleton模式將返回一個(gè)共享的實(shí)例,否則將返回一個(gè)新建的實(shí)例。如果沒(méi)有找到指定的bean,該方法可能會(huì)拋出BeansException異常(實(shí)際上將拋出NoSuchBeanDefinitionException異常),在對(duì)bean進(jìn)行實(shí)例化和預(yù)處理時(shí)也可能拋出異常
- Object getBean(String, Class) :返回以給定名稱注冊(cè)的bean實(shí)例,并轉(zhuǎn)換為給定class類型的實(shí)例,如果轉(zhuǎn)換失敗,相應(yīng)的異常(BeanNotOfRequiredTypeException)將被拋出。上面的getBean(String)方法也適用該規(guī)則。
- Class getType(String name) :返回給定名稱的bean的Class。如果沒(méi)有找到指定的bean實(shí)例,則拋出NoSuchBeanDefinitionException異常。
- boolean isSingleton(String) :判斷給定名稱的bean定義(或bean實(shí)例)是否為singleton模式,如果bean沒(méi)找到,則拋出NoSuchBeanDefinitionException異常。
- String[] getAliases(String) :返回給定bean名稱的所有別名。
???? 上面六點(diǎn),都是在BeanFactory中的基本和一些簡(jiǎn)單的用法,但在將其擴(kuò)展后了的ApplicationContext中加入了企業(yè)級(jí)的功能,比如國(guó)際化,資源訪問(wèn)等,這些我將在學(xué)習(xí)Spring
????? XML格式的元數(shù)據(jù)配置中學(xué)習(xí).
??? 三? .? 配置元數(shù)據(jù)
???????????我自己的理解: 配置元數(shù)據(jù)的作用就是Spring管理Bean對(duì)象關(guān)系和資源文件的"規(guī)章制度",它是告訴IOC容器如何去組織對(duì)象和對(duì)象之間的關(guān)系是怎樣的.
?????????? 目前,Spring支持三種配置元數(shù)據(jù)格式:XML格式、Java屬性文件格式或使用Spring公共API編程實(shí)現(xiàn)。很顯然,XML是現(xiàn)在最方便和容易編寫(xiě)的配置元數(shù)據(jù).
????????在Spring的XMl配置元數(shù)據(jù)格式為:
??????????












????????????? 到此,理解了什么是Spring,以及它在工程中的基本框架,下面著重學(xué)習(xí)的就是它的依賴注入和AOP技術(shù)的運(yùn)用,學(xué)習(xí)是如何在XML元數(shù)據(jù)中進(jìn)行配置.