<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
    主站蜘蛛池模板: 成人电影在线免费观看| 老外毛片免费视频播放| 免费的全黄一级录像带| 亚洲午夜日韩高清一区| 直接进入免费看黄的网站| 日本a级片免费看| 免费亚洲视频在线观看| 国产国产人免费视频成69大陆| 亚洲乱妇老熟女爽到高潮的片 | 久久精品a亚洲国产v高清不卡 | 久久亚洲精品成人777大小说| 男女拍拍拍免费视频网站| 国产亚洲av片在线观看18女人 | 久久狠狠高潮亚洲精品| 最近免费最新高清中文字幕韩国| 亚洲AV无码乱码在线观看富二代| 免费视频成人手机在线观看网址| 婷婷精品国产亚洲AV麻豆不片 | 亚洲人成影院在线无码按摩店| 青柠影视在线观看免费| 久久亚洲春色中文字幕久久久| 99热在线观看免费| 亚洲综合久久精品无码色欲| 日本免费人成黄页在线观看视频| 曰批免费视频播放免费| 国产偷v国产偷v亚洲高清| 性色午夜视频免费男人的天堂| 亚洲图片激情小说| 国产高清在线免费| 久久久久免费视频| 亚洲成aⅴ人片在线观| 午夜网站免费版在线观看| 免费一级特黄特色大片| 久久精品国产亚洲AV网站| 欧美大尺寸SUV免费| 阿v视频免费在线观看| 日本亚洲欧洲免费天堂午夜看片女人员 | 中文字幕高清免费不卡视频| 亚洲国产第一页www| 性一交一乱一视频免费看| 三年片免费高清版 |