<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    shenang博客技術(shù)文檔


    理論不懂就實踐,實踐不會就學(xué)理論!

    posts - 35,comments - 55,trackbacks - 0
     

    SpingBeanWrapperBeanFactory ApplicationContext

     

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

    我對這三個類的理解是:

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

    2、 Bean Factory負責(zé)根據(jù)配置文件創(chuàng)建Bean實例;

    3、 BeanFactory提供了針對Java Bean的管理功能,而ApplicationContext提供了一更為框架化的實現(xiàn)(從上面的示例中可以看出,BeanFactory的使用方式更加類似一個API,而非Framework style ApplicationContext覆蓋了BeanFactory的所有功能,并提供了更多的特性。此外,ApplicationContext為與現(xiàn)有應(yīng)用框架相整合,提供了更為開放式的實現(xiàn)(如對于Web應(yīng)用,我們可以在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"));

    對比之前的代碼,相信大家已經(jīng)知道BeanWrapper的實現(xiàn)原理。

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

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

    二、 Bean Factory

     Bean Factory,顧名思義,負責(zé)創(chuàng)建并維護Bean實例。

     Bean Factory負責(zé)根據(jù)配置文件創(chuàng)建Bean實例,可以配置的項目有:

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

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

    3 Bean初始化和銷毀方法

    4 Bean的依賴關(guān)系

    .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創(chuàng)建一個或多個別名。它可以是任意的字母符合。多個別名之間用逗號或空格分開。

    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(單例)。如果設(shè)為“true,則在BeanFactory作用范圍內(nèi),只維護此Bean的一個實例。如果設(shè)為“flase”,Bean將是Prototype(原型)狀態(tài),BeanFactory將為每次Bean請求創(chuàng)建一個新的Bean實例。

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

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

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

        2、“byName:通過Bean的屬性名實現(xiàn)自動裝配。

        3、“byType:通過Bean的類型實現(xiàn)自動裝配。

        4、“constructor:類似于byType,但它是用于構(gòu)造函數(shù)的參數(shù)的自動組裝。

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

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

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

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

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

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

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

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

    12)、destroy-method:用來定義Bean的銷毀方法,它在BeanFactory關(guān)閉時調(diào)用。同樣,它也必須是一個無參數(shù)的方法。它只能應(yīng)用于singleton Bean

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

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

    (15) <value>

    通過<value/>節(jié)點可指定屬性值。BeanFactory將自動根據(jù)Java Bean對應(yīng)的屬性

    類型加以匹配。

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

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

    (16) <ref>

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

    性引用了iddataSourceBeanBeanFactory將在運行期創(chuàng)建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>

    .關(guān)于ApplicationContext

    ApplicationContext

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

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

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

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

    web.xml中對ApplicationContext進行配置)

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

     1國際化支持

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

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

    2資源訪問

    支持對文件和URL的訪問。

    3事件傳播

    事件傳播特性為系統(tǒng)中狀態(tài)改變時的檢測提供了良好支持。

    4多實例加載

    可以在同一個應(yīng)用中加載多個Context實例。

     

     

    posted on 2009-03-23 11:30 重慶理工小子 閱讀(1620) 評論(0)  編輯  收藏 所屬分類: Spring2
    主站蜘蛛池模板: 久久精品国产亚洲av天美18| 久久久WWW免费人成精品| 免费A级毛片无码A| 香蕉免费看一区二区三区| 亚洲无成人网77777| 国产无遮挡吃胸膜奶免费看| 91免费国产视频| 国产成人精品日本亚洲专| 国产成人精品日本亚洲专区61 | 精品一区二区三区免费观看| 亚洲专区先锋影音| 国产亚洲福利一区二区免费看| 嫩草影院在线播放www免费观看| 亚洲精品国产日韩| 亚洲av综合avav中文| 免费视频中文字幕| 亚洲精品免费在线观看| 黄色一级视频免费观看| 久久精品国产亚洲AV久| 亚洲精品国产字幕久久不卡| 日本不卡高清中文字幕免费| 久久成人免费大片| 一区二区三区免费在线视频 | 亚洲欧好州第一的日产suv| 久久亚洲国产精品一区二区| 免费高清资源黄网站在线观看| 久久国产乱子免费精品| 日日躁狠狠躁狠狠爱免费视频 | 国产又黄又爽又大的免费视频 | 久久亚洲综合色一区二区三区| 国产麻豆免费观看91| 久久久久久精品免费看SSS| 一级毛片人与动免费观看| 狠狠色伊人亚洲综合网站色| 亚洲一区二区三区四区在线观看| mm1313亚洲国产精品美女| 情侣视频精品免费的国产| 国产91免费在线观看| 久久综合给合久久国产免费| 99re6在线视频精品免费| 深夜福利在线视频免费|