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

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

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

    一.從XML文件中獲取Bean的方法

    1.采用BeanFactory方式

    ????????Resource?rs?=?new?FileSystemResource("beans-config.xml");
    ????????BeanFactory?factory?
    =?new?XmlBeanFactory(rs);
    ????????HelloBean?helloBean?
    =?(HelloBean)factory.getBean("helloBean");


    采用BeanFactory方式,可以利用XmlBeanFactory從xml配置文件中獲得bean,也可以使用其它方式,比如利用PropertiesFactoryBean從.property文件中獲得。

    2.采用ApplicationContext方式
    采用BeanFactory對簡單的應用程序來說就夠了,可以獲得對象管理上的便利性。
    但是要獲取一些特色和高級的容器功能,可以采用ApplicationContext。
    ApplicationContext提供了一些高級的功能,比如:
    1.提供取得資源文件更方便的方法
    2.提供文字消息解析的方法
    3.支持國際化(i18n)消息
    4.可以發布事件,對事件感興趣的Bean可以接收這些事件

    Spring創始者建議采用ApplicationContext取代BeanFactory。
    在實現ApplicationContext借口的類中,常用的幾個:
    FileSystemXmlApplicationContext:
    可以指定XML定義文件的相對路徑或者絕對路徑來讀取定義文件。

    ClassPathXmlApplicationCOntext:
    可以從classpath中讀取XML文件

    XmlWebApplicationCOntext:
    從Web應用程序的文件架構中,指定相對位置來讀取定義文件。
    一個簡單的例子:

    package?cn.blogjava.hello;

    import?org.springframework.context.ApplicationContext;
    import?org.springframework.context.support.FileSystemXmlApplicationContext;

    public?class?SpringDemo?{
    ????
    public?static?void?main(String[]?args)?{
    ????????ApplicationContext?context?
    =?
    ????????????
    new?FileSystemXmlApplicationContext("beans-config.xml");????????
    ????????HelloBean?helloBean?
    =?(HelloBean)context.getBean("helloBean");
    ????????System.out.print(
    "Name:?");
    ????????System.out.println(helloBean.getName());
    ????????System.out.print(
    "Word:?");
    ????????System.out.println(helloBean.getHelloWord());
    ????}
    }

    二.Type 2 IoC, Type 3 IoC
    Type2是利用setter方法完成依賴注入,這是Spring鼓勵的。但也允許使用Type 3注入,也就是利用構造函數完成注入。
    例如:
    package?cn.blogjava.hello;

    public?class?HelloBean?{
    ????
    ????
    private?String?helloWord;
    ????
    private?String?name;
    ????
    ????
    public?HelloBean()?{
    ????????
    ????}

    ????
    public?HelloBean(String?helloWord,?String?name)?{
    ????????
    this.helloWord?=?helloWord;
    ????????
    this.name?=?name;
    ????}????
    ????
    ????
    public?String?getHelloWord()?{
    ????????
    return?helloWord;
    ????}

    ????
    public?void?setHelloWord(String?helloword)?{
    ????????
    this.helloWord?=?helloword;
    ????}

    ????
    public?String?getName()?{
    ????????
    return?name;
    ????}

    ????
    public?void?setName(String?name)?{
    ????????
    this.name?=?name;
    ????}
    ????
    }

    配置文件:
    beans-config.xml
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?beans?PUBLIC?"-//SPRING/DTD?BEAN/EN"
    ????"http://www.springframework.org/dtd/spring-beans.dtd"
    >
    <beans>
    ????
    <bean?id="helloBean"?class="cn.blogjava.hello.HelloBean"?>
    ????????
    <constructor-arg?index="0">
    ????????????
    <value>YYY!</value>
    ????????
    </constructor-arg>
    ????????
    <constructor-arg?index="1">
    ????????????
    <value>Hello!</value>
    ????????
    </constructor-arg>
    ????
    </bean>
    </beans>

    三.屬性參考
    如果在Bean文件中已經有一個定義的Bean實例,可以讓某個屬性直接參考這個實例。
    package?cn.blogjava.hello;

    import?java.util.Date;

    public?class?HelloBean?{
    ????
    ????
    private?String?helloWord;
    ????
    private?Date?date;
    ????
    ????
    public?HelloBean()?{
    ????????
    ????}
    ?
    ????
    ????
    public?String?getHelloWord()?{
    ????????
    return?helloWord;
    ????}

    ????
    public?void?setHelloWord(String?helloword)?{
    ????????
    this.helloWord?=?helloword;
    ????}
    ????
    ????
    public?Date?getDate()?{
    ????????
    return?date;
    ????}

    ????
    public?void?setDate(Date?date)?{
    ????????
    this.date?=?date;
    ????}
    }

    配置文件
    beans-config.xml
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?beans?PUBLIC?"-//SPRING/DTD?BEAN/EN"
    ????"http://www.springframework.org/dtd/spring-beans.dtd"
    >
    <beans>
    ????
    <bean?id="dateBean"?class="java.util.Date"/>
    ????
    <bean?id="helloBean"?class="cn.blogjava.hello.HelloBean"?>
    ????????
    <property?name="helloWord">
    ????????????
    <value>Hello!</value>
    ????????
    </property>
    ?
    ????????
    <property?name="date">
    ????????????
    <ref?bean="dateBean"?/>
    ????????
    </property>????????????????
    ????
    </bean>
    </beans>

    如果某個Bean的實例只被參考一次,可以直接在屬性定義時使用<bean>標簽,并僅需要指定其"class"屬性即可。

    ????????
    <property?name="date">
    ????????????
    <bean?class="java.util.Date"?/>
    ????????
    </property>??????????????

    四.自動綁定
    byType
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?beans?PUBLIC?"-//SPRING/DTD?BEAN/EN"
    ????"http://www.springframework.org/dtd/spring-beans.dtd"
    >
    <beans>
    ????
    <bean?id="dateBean"?class="java.util.Date"/>
    ????
    <bean?id="helloBean"?class="cn.blogjava.hello.HelloBean" ?autowire="byType">
    ????????
    <property?name="helloWord">
    ????????????
    <value>Hello!</value>
    ????????
    </property>
    ????????
    <property?name="name">
    ????????????
    <value>YYY!</value>
    ????????
    </property>?????????????
    ????
    </bean>
    </beans>
    這里并沒有指定helloBean的data屬性,而是通過自動綁定,指定了"byType",所以會根據helloBean的setDate()方法所接受的類型,來判斷定義文件中是否有類似的對象,并將之設定給helloBean的setDate(),如果無法完成綁定,會拋異常。

    byName
    根據id屬性上指定的別名是否與setter名稱一致來綁定。無法綁定,僅維持未綁定狀態,不拋異常。
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?beans?PUBLIC?"-//SPRING/DTD?BEAN/EN"
    ????"http://www.springframework.org/dtd/spring-beans.dtd"
    >
    <beans>
    ????
    <bean?id="date"?class="java.util.Date"/>
    ????
    <bean?id="helloBean"?class="cn.blogjava.hello.HelloBean"??autowire="byName">
    ????????
    <property?name="helloWord">
    ????????????
    <value>Hello!</value>
    ????????
    </property>
    ????????
    <property?name="name">
    ????????????
    <value>YYY!</value>
    ????????
    </property>?????????????
    ????
    </bean>
    </beans>
    ?autowire="constructor"
    根據構造方法上的參數類型,來匹配。無法綁定拋異常。
    autowire="autodetect"
    會試著用constructor,byType等方式來建立依賴關系。

    加入依賴檢查
    依賴檢查有4種方式:
    simple只檢查簡單的屬性,例如int或者String類型對象是否完成依賴。
    objects檢查對象類型的屬性是否完成依賴。
    all檢查所有的屬性,none是默認值,不檢查依賴性。
    ????<bean?id="helloBean"?class="cn.blogjava.hello.HelloBean"??autowire="autodetect" dependency-check="all">
    ????????
    <property?name="helloWord">
    ????????????
    <value>Hello!</value>
    ????????
    </property>
    ????????
    <property?name="name">
    ????????????
    <value>YYY!</value>
    ????????
    </property>?????????????
    ????
    </bean>

    五.集合對象的注入
    對于像數組、List、Set、Map等集合對象,在注入前若必須填充一些對象到集合中,然后再將集合對象注入到Bean中時,可以交給Spring的IoC容器自動維護或者生成集合對象,并完成依賴注入。

    SomeBean.java
    package?cn.blogjava.hello;

    import?java.util.List;
    import?java.util.Map;

    public?class?SomeBean?{
    ????
    ????
    private?String[]?someStrArray;
    ????
    private?Some[]?someObjectArray;
    ????
    private?List?someList;
    ????
    private?Map?someMap;
    ????
    public?List?getSomeList()?{
    ????????
    return?someList;
    ????}
    ????
    public?void?setSomeList(List?someList)?{
    ????????
    this.someList?=?someList;
    ????}
    ????
    public?Map?getSomeMap()?{
    ????????
    return?someMap;
    ????}
    ????
    public?void?setSomeMap(Map?someMap)?{
    ????????
    this.someMap?=?someMap;
    ????}
    ????
    public?Some[]?getSomeObjectArray()?{
    ????????
    return?someObjectArray;
    ????}
    ????
    public?void?setSomeObjectArray(Some[]?someObjectArray)?{
    ????????
    this.someObjectArray?=?someObjectArray;
    ????}
    ????
    public?String[]?getSomeStrArray()?{
    ????????
    return?someStrArray;
    ????}
    ????
    public?void?setSomeStrArray(String[]?someStrArray)?{
    ????????
    this.someStrArray?=?someStrArray;
    ????}
    ????
    ????
    }

    Some.java
    package?cn.blogjava.hello;

    public?class?Some?{
    ????
    private?String?name;

    ????
    public?String?getName()?{
    ????????
    return?name;
    ????}

    ????
    public?void?setName(String?name)?{
    ????????
    this.name?=?name;
    ????}????
    ????
    ????
    public?String?toString(){
    ????????
    return?name;
    ????}
    }

    beans-config.xml
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?beans?PUBLIC?"-//SPRING/DTD?BEAN/EN"
    ????"http://www.springframework.org/dtd/spring-beans.dtd"
    >
    <beans>
    ????
    <bean?id="some1"?class="cn.blogjava.hello.Some">
    ????????
    <property?name="name">
    ????????????
    <value>YYY</value>
    ????????
    </property>
    ????
    </bean>
    ????
    ????
    <bean?id="some2"?class="cn.blogjava.hello.Some">
    ????????
    <property?name="name">
    ????????????
    <value>BYF</value>
    ????????
    </property>
    ????
    </bean>
    ????
    ????
    <bean?id="someBean"?class="cn.blogjava.hello.SomeBean">
    ????????
    <property?name="someStrArray">
    ????????????
    <list>
    ????????????????
    <value>Hello!</value>
    ????????????????
    <value>Welcome!</value>
    ????????????
    </list>
    ????????
    </property>
    ????????
    ????????
    <property?name="someObjectArray">
    ????????????
    <list>
    ????????????????
    <ref?bean="some1"/>
    ????????????????
    <ref?bean="some2"/>
    ????????????
    </list>
    ????????
    </property>
    ????????
    ????????
    <property?name="someList">
    ????????????
    <list>
    ????????????????
    <ref?bean="some1"/>
    ????????????????
    <ref?bean="some2"/>????????????
    ????????????
    </list>
    ????????
    </property>
    ????????
    ????????
    <property?name="someMap">
    ????????????
    <map>
    ????????????????
    <entry?key="MapTest">
    ????????????????????
    <value>Hello?YYY!</value>
    ????????????????
    </entry>
    ????????????????
    <entry?key="someKey1">
    ????????????????????
    <ref?bean="some1"?/>
    ????????????????
    </entry>
    ????????????
    </map>
    ????????
    </property>
    ????
    </bean>
    ????????
    ????
    <bean?id="helloBean"?class="cn.blogjava.hello.HelloBean"?>
    ????
    </bean>
    </beans>

    測試類:SpringDemo.java
    package?cn.blogjava.hello;

    import?java.util.List;
    import?java.util.Map;

    import?org.springframework.context.ApplicationContext;
    import?org.springframework.context.support.FileSystemXmlApplicationContext;

    public?class?SpringDemo?{
    ????
    public?static?void?main(String[]?args)?{
    ????????ApplicationContext?context?
    =?
    ????????????
    new?FileSystemXmlApplicationContext("beans-config.xml");????????
    ????????SomeBean?someBean?
    =?(SomeBean)context.getBean("someBean");

    ????????
    //取得數組類型依賴注入對象
    ????????String[]?strs?=?(String[])someBean.getSomeStrArray();
    ????????Some[]?somes?
    =?(Some[])someBean.getSomeObjectArray();
    ????????
    for(int?i=0;?i?<?strs.length;?i++){
    ????????????System.out.println(strs[i]?
    +?","?+?somes[i].getName());
    ????????}
    ????????
    ????????System.out.println();
    ????????
    //取得List類型依賴注入對象
    ????????List?someList?=?someBean.getSomeList();
    ????????
    for(int?i=0;?i?<?someList.size();?i++)?{
    ????????????System.out.println(someList.get(i));
    ????????}
    ????????
    ????????System.out.println();
    ????????
    //取得Map類型依賴注入對象
    ????????Map?someMap?=?someBean.getSomeMap();
    ????????System.out.println(someMap.get(
    "MapTest"));
    ????????System.out.println(someMap.get(
    "someKey1"));
    ????}
    }
    posted on 2006-07-26 11:24 knowhow 閱讀(5146) 評論(0)  編輯  收藏 所屬分類: Framework

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品第一国产综合精品99 | 亚洲色无码专区在线观看| 全部免费国产潢色一级| 国产成人免费A在线视频| 精品久久久久久久免费人妻| 免费观看a级毛片| 日本v片免费一区二区三区| 国产高清在线免费视频| 又大又黄又粗又爽的免费视频| www.亚洲精品| 美女黄频免费网站| 国产亚洲美女精品久久久久| 特级毛片爽www免费版| 人妻仑乱A级毛片免费看| 成人毛片100免费观看| 三上悠亚在线观看免费| 久久久久国产免费| 免费在线观看一区| 国产免费A∨在线播放| 免费人成黄页在线观看日本| 黄色成人免费网站| 一个人看的www在线观看免费| 在线播放免费播放av片| 免费中文字幕一级毛片| 亚洲日韩aⅴ在线视频| 久久亚洲精品无码AV红樱桃| 亚洲av无码一区二区三区天堂古代| 亚洲日韩一中文字暮| 免费又黄又爽又猛大片午夜| 国内精品久久久久影院免费| 日本免费xxxx| 日韩亚洲精品福利| 久久久久久亚洲精品| 亚洲中文无码永久免| 未满十八私人高清免费影院| 美女视频黄a视频全免费网站色窝| 亚洲最大免费视频网| 日本免费观看网站| 亚洲成AV人片在线观看ww| 亚洲人成电影网站| 免费在线观看一区|