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

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          一??.? 對于Spring的容器管理,首先得知道什么是容器管理.

          ??????????java是一門面向對象的語言,在代碼里,粗略的講一個對象的體現就是一個類(class)的實例.也可以說就是一個JavaBean.在一個實際工程中,像這樣的對象或實例會存在很多,并且每個對象的狀態,作用范圍,以及它們之間的關系(在Spring中為依賴)是很復雜的,所以要管理它們也是很大的開銷.而在spring中,對與它們的管理就是容器管理.你可以看作容器就是這些bean的集合. 管理的方面主要有bean的創建,周期(作用域)和初始屬性(注入),以及bean之間相互依賴的關系等.用比較專業的話就是------管理對象對其進行實例化、配置以及組裝.
          ?????????????????? SpringConrainer.jpg
          ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Spring IoC 容器

          二 .??容器的運作.
          ??????????????????在Spring包的有兩個很重要的東西,org.springframework.beansorg.springframework.context包,這兩個包是IOC的基礎包,自然也是運行IOC容器的關鍵.而其中關鍵的關鍵就是分別在兩個包里的BeanFactoryApplicationContext,其中BeanFactory提供了配制框架及基本功能,??而
          ApplicationContext則是它的擴展,這個擴展是針對企業級別的,當中加入很多了企業級的支持,功能得到了進一步增強,比如更易與Spring AOP集成、消息資源處理(國際化處理)、事件傳遞及各種不同應用層的context實現(如針對web應用的WebApplicartionContext).
          ????1 .?實例化容器:
          ???????在項目工程中用于實例化容器的類一般都是ApplicationContext以及他的擴展WebApplicationContext,當然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");

          ?????????????實際的項目中,上述的實例化方法一般都是用于非Web工程(c/s)或者測試代碼中而在web工程內一般用的是ApplicationContext,實例化它只是在web配置文件(web.xml)里寫入配置信息:?
          ???????????????

          ?<!--?????????必須??????????????? -->
          <context-param>
          ??
          <param-name>contextConfigLocation</param-name>
          ??
          <param-value>/WEB-INF/daoContext.xml?/WEB-INF/applicationContext.xml</param-value>
          </context-param>

          ??? <!--?????????下面的listener 和 servlet 是兩個相同效果的配置?,只能選其一,只是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.?容器的使用:
          ????????????一般這是在代碼級創建了IOC容器后(就是上述的(1)),或者是獲得了容器的"引用"后用(這里其實是beanFactory和ApplicationContext的實現類的引用 如:);

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

          ???

          1. boolean containsBean(String) :如果BeanFactory包含給定名稱的bean定義(或bean實例),則返回true
          2. Object getBean(String) :返回以給定名字注冊的bean實例。根據bean的配置情況,如果為singleton模式將返回一個共享的實例,否則將返回一個新建的實例。如果沒有找到指定的bean,該方法可能會拋出BeansException異常(實際上將拋出NoSuchBeanDefinitionException異常),在對bean進行實例化和預處理時也可能拋出異常
          3. Object getBean(String, Class) :返回以給定名稱注冊的bean實例,并轉換為給定class類型的實例,如果轉換失敗,相應的異常(BeanNotOfRequiredTypeException)將被拋出。上面的getBean(String)方法也適用該規則。
          4. Class getType(String name) :返回給定名稱的bean的Class。如果沒有找到指定的bean實例,則拋出NoSuchBeanDefinitionException異常。
          5. boolean isSingleton(String) :判斷給定名稱的bean定義(或bean實例)是否為singleton模式,如果bean沒找到,則拋出NoSuchBeanDefinitionException異常。
          6. String[] getAliases(String) :返回給定bean名稱的所有別名。

          ???? 上面六點,都是在BeanFactory中的基本和一些簡單的用法,但在將其擴展后了的ApplicationContext中加入了企業級的功能,比如國際化,資源訪問等,這些我將在學習Spring
          ????? XML格式的元數據配置中學習.

          ??? 三? .? 配置元數據
          ???????????我自己的理解: 配置元數據的作用就是Spring管理Bean對象關系和資源文件的"規章制度",它是告訴IOC容器如何去組織對象和對象之間的關系是怎樣的.
          ?????????? 目前,Spring支持三種配置元數據格式:XML格式、Java屬性文件格式或使用Spring公共API編程實現。很顯然,XML是現在最方便和容易編寫的配置元數據.
          ????????在Spring的XMl配置元數據格式為:
          ??????????

          <? 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,以及它在工程中的基本框架,下面著重學習的就是它的依賴注入和AOP技術的運用,學習是如何在XML元數據中進行配置.










          posted on 2007-11-15 16:43 風之殤 閱讀(285) 評論(0)  編輯  收藏 所屬分類: spring學習筆記

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 桦甸市| 静安区| 商水县| 苍南县| 安义县| 抚顺市| 故城县| 揭西县| 罗源县| 阆中市| 布尔津县| 邵阳市| 女性| 健康| 张家川| 乳源| 康乐县| 丁青县| 凤冈县| 英山县| 武平县| 林甸县| 阜平县| 富顺县| 福州市| 河北省| 梓潼县| 乌拉特中旗| 清涧县| 宜阳县| 五常市| 清水县| 上栗县| 福泉市| 洪湖市| 甘德县| 沂源县| 龙川县| 申扎县| 托克逊县| 桐城市|