隨筆 - 1  文章 - 0  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評(píng)論

          一??.? 對(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í)例化、配置以及組裝.
          ?????????????????? SpringConrainer.jpg
          ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Spring IoC 容器

          二 .??容器的運(yùn)作.
          ??????????????????在Spring包的有兩個(gè)很重要的東西,org.springframework.beansorg.springframework.context包,這兩個(gè)包是IOC的基礎(chǔ)包,自然也是運(yùn)行IOC容器的關(guān)鍵.而其中關(guān)鍵的關(guān)鍵就是分別在兩個(gè)包里的BeanFactoryApplicationContext,其中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>
          ??
          <param-name>contextConfigLocation</param-name>
          ??
          <param-value>/WEB-INF/daoContext.xml?/WEB-INF/applicationContext.xml</param-value>
          </context-param>

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

          <listener>
          ??
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
          </listener>

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

          <servlet>
          ??
          <servlet-name>context</servlet-name>
          ??
          <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
          ??
          <load-on-startup>1</load-on-startup>
          </servlet>

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

          InputStream?is? = ? new ?FileInputStream( " beans.xml " );
          BeanFactory?factory?
          = ? new ?XmlBeanFactory(is);

          ???

          1. boolean containsBean(String) :如果BeanFactory包含給定名稱的bean定義(或bean實(shí)例),則返回true
          2. 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í)也可能拋出異常
          3. Object getBean(String, Class) :返回以給定名稱注冊(cè)的bean實(shí)例,并轉(zhuǎn)換為給定class類型的實(shí)例,如果轉(zhuǎn)換失敗,相應(yīng)的異常(BeanNotOfRequiredTypeException)將被拋出。上面的getBean(String)方法也適用該規(guī)則。
          4. Class getType(String name) :返回給定名稱的bean的Class。如果沒(méi)有找到指定的bean實(shí)例,則拋出NoSuchBeanDefinitionException異常。
          5. boolean isSingleton(String) :判斷給定名稱的bean定義(或bean實(shí)例)是否為singleton模式,如果bean沒(méi)找到,則拋出NoSuchBeanDefinitionException異常。
          6. 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ù)格式為:
          ??????????

          <? xml?version = " 1.0 " ?encoding = " UTF-8 " ?>
          < beans?xmlns = " http://www.springframework.org/schema/beans "
          ???????xmlns:xsi
          = " http://www.w3.org/2001/XMLSchema-instance "
          ???????xsi:schemaLocation
          = " http: // www.springframework.org/schema/beans? http://www.springframework.org/schema/beans/spring-beans-2.0.xsd ">
          ?? < bean?id = "XXX " ? class = "XXX " >
          ????
          <!-- ?collaborators?and?configuration? for ? this ?bean?go?here? -->
          ??
          </ bean >
          ??
          < bean?id = "XXX " ? class ="XXX " >
          ????
          <!-- ?collaborators?and?configuration? for ? this ?bean?go?here? -->
          ??
          </ bean >
          ??
          <!-- ?more?bean?definitions?go?here -->
          </ beans >

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










          posted on 2007-11-15 16:43 風(fēng)之殤 閱讀(283) 評(píng)論(0)  編輯  收藏 所屬分類: spring學(xué)習(xí)筆記

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 济宁市| 忻城县| 明光市| 耒阳市| 沐川县| 扎鲁特旗| 桑日县| 西城区| 新宁县| 巩留县| 搜索| 侯马市| 安新县| 莒南县| 鄂尔多斯市| 靖西县| 武穴市| 商城县| 曲沃县| 宁河县| 古蔺县| 永修县| 正镶白旗| 鲜城| 绵竹市| 唐海县| 凤庆县| 稷山县| 遵义市| 长治市| 光泽县| 罗甸县| 兴城市| 抚州市| 衡阳市| 巴东县| 广宁县| 内乡县| 怀宁县| 金山区| 丰镇市|