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

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

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

    shenang博客技術(shù)文檔


    理論不懂就實(shí)踐,實(shí)踐不會(huì)就學(xué)理論!

    posts - 35,comments - 55,trackbacks - 0
     

    SpingBeanWrapperBeanFactory ApplicationContext

     

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

    我對(duì)這三個(gè)類的理解是:

    1、 通過Spring BeanWrapper去操作一個(gè)JavaBean;

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

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

    一、看看如何通過Spring BeanWrapper操作一個(gè)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"));

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

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

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

    二、 Bean Factory

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

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

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

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

    3 Bean初始化和銷毀方法

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

    .Bean Factory的生命周期

    下面是一個(gè)較為完整的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)識(shí)名。它必須是合法的XML ID,在整個(gè)XML文檔中唯一。

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

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

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

    5)、abstract(默認(rèn)為”false”):用來定義Bean是否為抽象Bean。它表示這個(gè)Bean將不會(huì)被實(shí)例化,一般用于父類Bean,因?yàn)楦割?/span>Bean主要是供子類Bean繼承使用。

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

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

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

        1、“no:不使用自動(dòng)裝配功能。

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

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

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

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

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

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

    2、objects:只做對(duì)象間依賴的檢查。

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

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

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

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

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

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

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

    (15) <value>

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

    類型加以匹配。

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

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

    (16) <ref>

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

    性引用了iddataSourceBeanBeanFactory將在運(yùn)行期創(chuàng)建dataSource bean實(shí)例,并將其

    引用傳入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提供了針對(duì)Java Bean的管理功能,而ApplicationContext提供了一個(gè)更為框架化的

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

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

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

    web.xml中對(duì)ApplicationContext進(jìn)行配置)

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

     1國際化支持

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

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

    2資源訪問

    支持對(duì)文件和URL的訪問。

    3事件傳播

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

    4多實(shí)例加載

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

     

     

    posted on 2009-03-23 11:30 重慶理工小子 閱讀(1630) 評(píng)論(0)  編輯  收藏 所屬分類: Spring2
    主站蜘蛛池模板: 成人女人A级毛片免费软件| 亚洲性一级理论片在线观看| 黄网站色成年片大免费高清| 97无码免费人妻超级碰碰碰碰| 亚洲视频在线观看视频| 久久国产色AV免费观看| 亚洲精品视频在线观看免费| 久久成人国产精品免费软件| 亚洲国产综合在线| 成人免费看黄20分钟| 亚洲色成人四虎在线观看| 日本高清免费aaaaa大片视频| 亚洲人成无码网站在线观看| 国产国产人免费人成免费视频 | 国产免费人成视频尤勿视频| 亚洲日韩在线观看| 9久久免费国产精品特黄| 亚洲AV永久纯肉无码精品动漫| 毛片在线全部免费观看| 亚洲精品国产手机| 成年女人色毛片免费看| 国产亚洲视频在线观看网址| 国产精品亚洲视频| 久久aa毛片免费播放嗯啊| 亚洲中字慕日产2020| 国产精品酒店视频免费看| 一级特级aaaa毛片免费观看| 国产亚洲精品va在线| 在线观看成人免费视频不卡| 亚洲av无码av在线播放| 相泽亚洲一区中文字幕| 18观看免费永久视频| 亚洲av日韩综合一区久热| 国产性爱在线观看亚洲黄色一级片| 日本不卡免费新一区二区三区 | 亚洲人成电影亚洲人成9999网 | 亚洲国产成人久久精品99| 99久久国产精品免费一区二区| 亚洲AV无码久久久久网站蜜桃 | 亚洲Av永久无码精品三区在线| 黄页网站在线看免费|