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

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

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

    Topquan's Blog

    分享價(jià)值----成就你我----我的博客----你的家

    Spring:Bean基本管理

    一.從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對(duì)簡(jiǎn)單的應(yīng)用程序來說就夠了,可以獲得對(duì)象管理上的便利性。
    但是要獲取一些特色和高級(jí)的容器功能,可以采用ApplicationContext。
    ApplicationContext提供了一些高級(jí)的功能,比如:
    1.提供取得資源文件更方便的方法
    2.提供文字消息解析的方法
    3.支持國(guó)際化(i18n)消息
    4.可以發(fā)布事件,對(duì)事件感興趣的Bean可以接收這些事件

    Spring創(chuàng)始者建議采用ApplicationContext取代BeanFactory。
    在實(shí)現(xiàn)ApplicationContext借口的類中,常用的幾個(gè):
    FileSystemXmlApplicationContext:
    可以指定XML定義文件的相對(duì)路徑或者絕對(duì)路徑來讀取定義文件。

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

    XmlWebApplicationCOntext:
    從Web應(yīng)用程序的文件架構(gòu)中,指定相對(duì)位置來讀取定義文件。
    一個(gè)簡(jiǎn)單的例子:

    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鼓勵(lì)的。但也允許使用Type 3注入,也就是利用構(gòu)造函數(shù)完成注入。
    例如:
    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文件中已經(jīng)有一個(gè)定義的Bean實(shí)例,可以讓某個(gè)屬性直接參考這個(gè)實(shí)例。
    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>

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

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

    四.自動(dòng)綁定
    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屬性,而是通過自動(dòng)綁定,指定了"byType",所以會(huì)根據(jù)helloBean的setDate()方法所接受的類型,來判斷定義文件中是否有類似的對(duì)象,并將之設(shè)定給helloBean的setDate(),如果無法完成綁定,會(huì)拋異常。

    byName
    根據(jù)id屬性上指定的別名是否與setter名稱一致來綁定。無法綁定,僅維持未綁定狀態(tài),不拋異常。
    <?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"
    根據(jù)構(gòu)造方法上的參數(shù)類型,來匹配。無法綁定拋異常。
    autowire="autodetect"
    會(huì)試著用constructor,byType等方式來建立依賴關(guān)系。

    加入依賴檢查
    依賴檢查有4種方式:
    simple只檢查簡(jiǎn)單的屬性,例如int或者String類型對(duì)象是否完成依賴。
    objects檢查對(duì)象類型的屬性是否完成依賴。
    all檢查所有的屬性,none是默認(rèn)值,不檢查依賴性。
        <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>

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

    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>

    測(cè)試類: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");

            
    //取得數(shù)組類型依賴注入對(duì)象
            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類型依賴注入對(duì)象
            List someList = someBean.getSomeList();
            
    for(int i=0; i < someList.size(); i++) {
                System.out.println(someList.get(i));
            }
            
            System.out.println();
            
    //取得Map類型依賴注入對(duì)象
            Map someMap = someBean.getSomeMap();
            System.out.println(someMap.get(
    "MapTest"));
            System.out.println(someMap.get(
    "someKey1"));
        }
    }

    posted on 2006-08-05 00:55 topquan 閱讀(263) 評(píng)論(0)  編輯  收藏 所屬分類: Spring

    主站蜘蛛池模板: 国产性爱在线观看亚洲黄色一级片 | 亚洲成人午夜在线| 亚洲免费一级视频| 白白色免费在线视频| 亚洲成色WWW久久网站| 歪歪漫画在线观看官网免费阅读 | 日韩视频免费一区二区三区| 四虎影视久久久免费| 亚洲精品线在线观看| 免费观看理论片毛片| 日本高清不卡aⅴ免费网站| 亚洲AV成人噜噜无码网站| 亚洲成AV人网址| 在线日本高清免费不卡| 99亚洲精品卡2卡三卡4卡2卡| 亚洲av无码成人黄网站在线观看| 在线视频免费观看高清| 大妹子影视剧在线观看全集免费| 亚洲人成激情在线播放| 超清首页国产亚洲丝袜| 皇色在线视频免费网站| 中文字幕永久免费| 亚洲AV无码一区二区三区牛牛| 中文字幕亚洲一区| 在线免费观看一区二区三区| 国偷自产一区二区免费视频 | 国产成人精品高清免费| 午夜免费啪视频在线观看| 亚洲av永久中文无码精品综合| 国产成A人亚洲精V品无码| 国产精品免费视频播放器| 91免费福利精品国产| 一级毛片大全免费播放| 亚洲人成图片网站| 亚洲国产成人久久精品影视| 亚洲国产a级视频| 香蕉视频在线观看免费国产婷婷 | 国产亚洲国产bv网站在线| 久久精品国产亚洲AV麻豆王友容| 全黄a免费一级毛片人人爱| 免费A级毛片无码免费视|