<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負(fù)責(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進(jìn)行配置。

    一、看看如何通過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è)定機(jī)制,而這樣的機(jī)制,也正是Spring依賴注入機(jī)制所依賴的基礎(chǔ)。

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

    二、 Bean Factory

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

     Bean Factory負(fù)責(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的唯一標(biāo)識名。它必須是合法的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(默認(rèn)為”false”):用來定義Bean是否為抽象Bean。它表示這個Bean將不會被實例化,一般用于父類Bean,因為父類Bean主要是供子類Bean繼承使用。

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

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

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

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

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

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

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

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

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

    1、none:不進(jìn)行依賴檢查。

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

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

    4、all:對所有類型的依賴進(jìn)行檢查。它包括了前面的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進(jìn)行配置)

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

     1國際化支持

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

    信息抽取到配置文件中加以定義,為我們進(jìn)行應(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永久青草无码精品| 国产真人无遮挡作爱免费视频| 99ee6热久久免费精品6| 成人免费av一区二区三区| 色婷婷六月亚洲综合香蕉| 国产精品亚洲不卡一区二区三区| 日本一区二区免费看| 亚洲阿v天堂在线2017免费| 亚洲国产精品无码久久| 亚洲免费观看网站| 亚洲国产精品婷婷久久| 亚洲乱码日产一区三区| 亚洲精品国产精品乱码不卡| 日韩免费高清视频网站| 国产午夜精品免费一区二区三区| 免费无码国产V片在线观看| 亚洲小视频在线观看| 精品亚洲一区二区| 国产aⅴ无码专区亚洲av麻豆| 免费一级肉体全黄毛片| 999任你躁在线精品免费不卡| 免费黄色电影在线观看| 中国毛片免费观看| 国产精品九九久久免费视频 | 免费A级毛片无码视频| 拍拍拍无挡视频免费观看1000 | 99在线视频免费观看视频| 无码av免费网站| 久久免费观看国产99精品| 日本免费高清视频| 免费的全黄一级录像带| 国产一精品一AV一免费| 免费一级毛片在线播放视频| 成在人线av无码免费高潮喷水| 亚洲精品无码国产片| 亚洲日韩国产一区二区三区在线| 亚洲精品无码日韩国产不卡av| 亚洲乱妇老熟女爽到高潮的片| 亚洲精品国产suv一区88|