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

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

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

    MicroFish

    Open & Open hits
    隨筆 - 33, 文章 - 2, 評論 - 4, 引用 - 0
    數據加載中……

    《Pro Spring》學習筆記(4)--配置BeanFactory(1)

    ?

    ??????Spring使用spring-beans.dtd文件來定義BeanFactory的XML配置規范。可以在http://www.springframework.org/dtd/spring-beans.dtd找到該dtd文件,當然,Spring的下載文件中也已經包含了該dtd文件。它被放在dist文件夾中。
    ????? 配置文件的根元素是beans,每個組件使用bean元素來定義,bean元素可以有許多屬性,其中有兩個是必須的:idclass(這里說的id是必須的并不意味著在配置文件中必須指定id,后面會詳細說明)。id表示組件的默認名稱,class表示組件的類型。
    ????? 如果使用設值注入,則需要使用property子標簽,來指定組件的屬性。
    <bean id="renderer" class="com.apress.prospring.ch2.StandardOutMessageRenderer">
    ??? <property name="messageProvider">
    ??????? <ref local="provider"/>
    ??? </property>
    </bean>
    ????? 使用構造子注入時,則使用constructor-arg子標簽,來指定構造函數的參數。
    <bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
    ??? <constructor-arg>
    ??????? <value>This is a configurable message</value>
    ??? </constructor-arg>
    </bean>
    ????? 當構造函數有多個參數時,可以使用constructor-arg標簽的index屬性,index屬性的值從0開始。
    <bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
    ??? <constructor-arg index="0">
    ??????? <value>first parameter</value>
    ??? </constructor-arg>
    ??? <constructor-arg index="1">
    ??????? <value>second parameter</value>
    ??? </constructor-arg>

    </bean>
    ???? 在使用構造子注入時,需要注意的問題是要避免構造子沖突的情況發生。考慮下面的情況:
    public class ConstructorConfusion {
    ??? public ConstructorConfusion(String someValue) {
    ??????? System.out.println("ConstructorConfusion(String) called");
    ??? }
    ??? public ConstructorConfusion(int someValue) {
    ??????? System.out.println("ConstructorConfusion(int) called");
    ??? }
    }
    ???? 使用如下配置文件
    <bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
    ??? <constructor-arg>
    ??????? <value>90</value>
    ??? </constructor-arg>
    </bean>
    ???? 那么,當實例化組件constructorConfusion時,將輸出ConstructorConfusion(String) called,也就是說參數類型為String的構造函數被調用了,這顯然不符合我們的要求。為了讓Spring調用參數為int的構造函數來實例化組件constructorConfusion,我們需要在配置文件中明確的告訴Spring,需要使用哪個構造函數,這需要使用constructor-argtype屬性。
    <bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
    ??? <constructor-arg type="int">
    ??????? <value>90</value>
    ??? </constructor-arg>
    </bean>
    ???? 我們不僅可以構造單個BeanFactory,而且可以建立有繼承關系的多個BeanFactory。只需要將父BeanFactory作為參數傳給子BeanFactory的構造函數即可。
    BeanFactory parent =
    ??? new XmlBeanFactory(new FileSystemResource("./ch4/src/conf/parent.xml"));
    BeanFactory child =
    ??? new XmlBeanFactory(new FileSystemResource("./ch4/src/conf/beans.xml"), parent);
    ???? 如果子BeanFactory和父BeanFactory中含有名稱相同的Bean,那么在子BeanFactory中使用
    <ref bean="sameNameBean"/>引用的將是子BeanFactory中的bean,為了引用父BeanFactory中的bean,我們需要使用ref標簽的parent屬性,<ref parent="sameNameBean"/>。
    ???? 為了注入集合屬性,Spring提供了list,map,setprops標簽,分別對應List,Map,Set和Properties,我們甚至可以嵌套的使用它們(List of Maps of Sets of Lists)。
    <bean id="injectCollection" class="com.apress.prospring.ch4.CollectionInjection">
    ??? <property name="map">
    ??????? <map>
    ??????????? <entry key="someValue">
    ??????????????? <value>Hello World!</value>
    ??????????? </entry>
    ??????????? <entry key="someBean">
    ??????????????? <ref local="oracle"/>
    ????????????</entry>
    ??????? </map>
    ??? </property>
    ??? <property name="props">
    ??????? <props>
    ??????????? <prop key="firstName">
    ??????????????? Rob
    ??????????? </prop>
    ??????????? <prop key="secondName">
    ??????????????? Harrop
    ??????????? </prop>
    ??????? </props>
    ??? </property>
    ??? <property name="set">
    ??????? <set>
    ??????????? <value>Hello World!</value>
    ??????????? <ref local="oracle"/>
    ??????? </set>
    ??? </property>
    ??? <property name="list">
    ??????? <list>
    ??????????? <value>Hello World!</value>
    ??????????? <ref local="oracle"/>
    ????????</list>
    ??? </property>
    </bean>

    posted on 2006-12-21 10:22 劉璐 閱讀(589) 評論(0)  編輯  收藏 所屬分類: spring

    主站蜘蛛池模板: 国产精品99久久免费观看| 羞羞的视频在线免费观看| 亚洲电影免费在线观看| 亚洲精品夜夜夜妓女网| 一级一片免费视频播放| 久久亚洲AV无码西西人体| a级毛片免费观看网站| 曰韩亚洲av人人夜夜澡人人爽| 和老外3p爽粗大免费视频| 中文字幕亚洲图片| 你懂的网址免费国产| 亚洲欧洲日韩不卡| 久久www免费人成看片| 亚洲ts人妖网站| 免费黄色一级毛片| ssswww日本免费网站片| 怡红院亚洲怡红院首页| 久久免费精品视频| 亚洲伊人色一综合网| 日韩a级毛片免费视频| 香蕉免费在线视频| 亚洲综合区图片小说区| 岛国片在线免费观看| 黄页网站在线免费观看| 亚洲毛片αv无线播放一区 | 日韩精品免费一线在线观看| 久久亚洲中文字幕精品一区四| 成人爽a毛片免费| 亚洲一级毛片中文字幕| 国产猛烈高潮尖叫视频免费| 好男人资源在线WWW免费| 精品无码一区二区三区亚洲桃色| 无限动漫网在线观看免费| 日韩大片在线永久免费观看网站 | 亚洲国产成人VA在线观看| 大地资源在线资源免费观看| 亚洲欧洲另类春色校园网站| 亚洲国产小视频精品久久久三级| 久久综合给合久久国产免费| 色九月亚洲综合网| 亚洲综合一区二区国产精品|