shenang博客技術文檔


          理論不懂就實踐,實踐不會就學理論!

          posts - 35,comments - 55,trackbacks - 0
           

          SpingBeanWrapperBeanFactory ApplicationContext

           

          org.springframework.beans包中包括了核心組件的實現類, 核心中的核心為BeanWrapperBeanFactory類。

          我對這三個類的理解是:

          1、 通過Spring BeanWrapper去操作一個JavaBean;

          2、 Bean Factory負責根據配置文件創建Bean實例;

          3、 BeanFactory提供了針對Java Bean的管理功能,而ApplicationContext提供了一更為框架化的實現(從上面的示例中可以看出,BeanFactory的使用方式更加類似一個API,而非Framework style ApplicationContext覆蓋了BeanFactory的所有功能,并提供了更多的特性。此外,ApplicationContext為與現有應用框架相整合,提供了更為開放式的實現(如對于Web應用,我們可以在web.xml中對ApplicationContext進行配置。

          一、看看如何通過Spring BeanWrapper操作一個JavaBean

           

          Object obj = Class.forName("net.xiaxin.beans.User").newInstance();

          BeanWrapper bw = new BeanWrapperImpl(obj);

          bw.setPropertyValue("name", "Erica");

          System.out.println("User name=>"+bw.getPropertyValue("name"));

          對比之前的代碼,相信大家已經知道BeanWrapper的實現原理。

          誠然,通過這樣的方式設定Java Bean屬性實在繁瑣,但它卻提供了一個通用的屬性設定機制,而這樣的機制,也正是Spring依賴注入機制所依賴的基礎。

          通過BeanWrapper,我們可以無需在編碼時就指定JavaBean的實現類和屬性值,通過在配置文件加以設定,就可以在運行期動態創建對象并設定其屬性(依賴關系)

          二、 Bean Factory

           Bean Factory,顧名思義,負責創建并維護Bean實例。

           Bean Factory負責根據配置文件創建Bean實例,可以配置的項目有:

          1 Bean屬性值及依賴關系(對其他Bean的引用)

          2 Bean創建模式(是否Singleton模式,即是否只針對指定類維持全局唯一的實例)

          3 Bean初始化和銷毀方法

          4 Bean的依賴關系

          .Bean Factory的生命周期

          下面是一個較為完整的Bean配置示例:

          Bean的定義

          <bean

              id="beanId"1

              name="beanName"2

              class="beanClass"3

              parent="parentBean"4

              abstract="true | false"5

              singleton="true | false"6

              lazy-init="true | false | default"7

              autowire="no | byName | byType | constructor | autodetect | default"8

              dependency-check = "none | objects | simple | all | default"9

              depends-on="dependsOnBean"10

              init-method="method"11

              destroy-method="method"12

              factory-method="method"13

           factory-bean="bean">14

          <property name="message">

          <value>HeLLo</value>             (15)

          </property>

          <property name="dataSource">

          <ref local="dataSource"/>            (16)

          </property>

          </bean>

          <bean    id="dataSource"                    

          class="org.springframework.jndi.JndiObjectFactoryBean">

          <property name="jndiName">

          <value>java:comp/env/jdbc/sample</value>

          </property>

          </bean>

          1)、id: Bean的唯一標識名。它必須是合法的XML ID,在整個XML文檔中唯一。

          2)、name: 用來為id創建一個或多個別名。它可以是任意的字母符合。多個別名之間用逗號或空格分開。

          3)、class: 用來定義類的全限定名(包名+類名)。只有子類Bean不用定義該屬性。

          4)、parent: 子類Bean定義它所引用它的父類Bean。這時前面的class屬性失效。子類Bean會繼承父類Bean的所有屬性,子類Bean也可以覆蓋父類Bean的屬性。注意:子類Bean和父類Bean是同一個Java類。

          5)、abstract(默認為”false”):用來定義Bean是否為抽象Bean。它表示這個Bean將不會被實例化,一般用于父類Bean,因為父類Bean主要是供子類Bean繼承使用。

          6)、singleton(默認為“true”):定義Bean是否是Singleton(單例)。如果設為“true,則在BeanFactory作用范圍內,只維護此Bean的一個實例。如果設為“flase”,Bean將是Prototype(原型)狀態,BeanFactory將為每次Bean請求創建一個新的Bean實例。

          7)、lazy-init(默認為“default”):用來定義這個Bean是否實現懶初始化。如果為“true”,它將在BeanFactory啟動時初始化所有的Singleton Bean。反之,如果為“false,它只在Bean請求時才開始創建Singleton Bean

          8)、autowire(自動裝配,默認為“default”):它定義了Bean的自動裝載方式。

              1、“no:不使用自動裝配功能。

              2、“byName:通過Bean的屬性名實現自動裝配。

              3、“byType:通過Bean的類型實現自動裝配。

              4、“constructor:類似于byType,但它是用于構造函數的參數的自動組裝。

              5、“autodetect:通過Bean類的反省機制(introspection)決定是使用“constructor”還是使用“byType”。

          9)、dependency-check(依賴檢查,默認為“default”):它用來確保Bean組件通過JavaBean描述的所以依賴關系都得到滿足。在與自動裝配功能一起使用時,它特別有用。

          1、none:不進行依賴檢查。

          2、objects:只做對象間依賴的檢查。

          3、simple:只做原始類型和String類型依賴的檢查

          4、all:對所有類型的依賴進行檢查。它包括了前面的objectssimple

          10)、depends-on(依賴對象):這個Bean在初始化時依賴的對象,這個對象會在這個Bean初始化之前創建。

          11)、init-method:用來定義Bean的初始化方法,它會在Bean組裝之后調用。它必須是一個無參數的方法。

          12)、destroy-method:用來定義Bean的銷毀方法,它在BeanFactory關閉時調用。同樣,它也必須是一個無參數的方法。它只能應用于singleton Bean

          13)、factory-method:定義創建該Bean對象的工廠方法。它用于下面的“factory-bean”,表示這個Bean是通過工廠方法創建。此時,“class”屬性失效。

          14)、factory-bean:定義創建該Bean對象的工廠類。如果使用了“factory-bean”則“class”屬性失效。

          (15) <value>

          通過<value/>節點可指定屬性值。BeanFactory將自動根據Java Bean對應的屬性

          類型加以匹配。

          下面的”desc”屬性提供了一個null值的設定示例。注意<value></value>代表一

          個空字符串,如果需要將屬性值設定為null,必須使用<null/>節點。

          (16) <ref>

          指定了屬性對BeanFactory中其他Bean的引用關系。示例中,TheActiondataSource

          性引用了iddataSourceBeanBeanFactory將在運行期創建dataSource bean實例,并將其

          引用傳入TheAction BeandataSource屬性。

          例:

          <beans>

               <description>Spring Bean Configuration Sample</description>

           

           <bean 

          id="TheAction"                    

           class="net.xiaxin.spring.qs.UpperAction"     

           singleton="true"                 

          init-method="init"                   

          destroy-method="cleanup"             

          depends-on="ActionManager"            

          >

           

             <property name="message">

          <value>HeLLo</value>             

          </property>

           

          <property name="desc">

          <null/>

          </property> 

           

          <property name="dataSource">

          <ref local="dataSource"/>            

          </property>

           </bean>

           

          <bean    id="dataSource"                    

          class="org.springframework.jndi.JndiObjectFactoryBean">

           

          <property name="jndiName">

          <value>java:comp/env/jdbc/sample</value>

          </property>

          </bean>

          .關于ApplicationContext

          ApplicationContext

           BeanFactory提供了針對Java Bean的管理功能,而ApplicationContext提供了一個更為框架化的

          實現(從上面的示例中可以看出,BeanFactory的使用方式更加類似一個API,而非Framework style 

          ApplicationContext覆蓋了BeanFactory的所有功能,并提供了更多的特性。此外,

          ApplicationContext為與現有應用框架相整合,提供了更為開放式的實現(如對于Web應用,我們可以在

          web.xml中對ApplicationContext進行配置)

          相對BeanFactory而言,ApplicationContext提供了以下擴展功能:

           1國際化支持

          我們可以在Beans.xml文件中,對程序中的語言信息(如提示信息)進行定義,將程序中的提示

          信息抽取到配置文件中加以定義,為我們進行應用的各語言版本轉換提供了極大的靈活性。

          2資源訪問

          支持對文件和URL的訪問。

          3事件傳播

          事件傳播特性為系統中狀態改變時的檢測提供了良好支持。

          4多實例加載

          可以在同一個應用中加載多個Context實例。

           

           

          posted on 2009-03-23 11:30 重慶理工小子 閱讀(1624) 評論(0)  編輯  收藏 所屬分類: Spring2
          主站蜘蛛池模板: 潮安县| 砚山县| 天门市| 建宁县| 鄂托克旗| 探索| 马公市| 望都县| 浪卡子县| 随州市| 弋阳县| 志丹县| 四会市| 连城县| 南开区| 日喀则市| 广昌县| 叶城县| 姜堰市| 社会| 宝丰县| 广河县| 克什克腾旗| 雷山县| 台安县| 芦溪县| 五指山市| 噶尔县| 唐山市| 读书| 台中市| 鞍山市| 广西| 当雄县| 萨迦县| 济宁市| 阿拉善右旗| 右玉县| 乳山市| 长白| 潮安县|