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

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

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

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
    Spring什么時候實例化bean,首先要分2種情況 
      第一:如果你使用BeanFactory作為Spring Bean的工廠類,則所有的bean都是在第一次使用該Bean的時候實例化 
      第二:如果你使用ApplicationContext作為Spring Bean的工廠類,則又分為以下幾種情況: 
           (1):如果bean的scope是singleton的,并且lazy-init為false(默認是false,所以可以不用設置),則ApplicationContext啟動的時候就實例化該Bean,并且將實例化的Bean放在一個map結構的緩存中,下次再使用該Bean的時候,直接從這個緩存中取 
           (2):如果bean的scope是singleton的,并且lazy-init為true,則該Bean的實例化是在第一次使用該Bean的時候進行實例化 
           (3):如果bean的scope是prototype的,則該Bean的實例化是在第一次使用該Bean的時候進行實例化 


    1、lazy init 在getBean時實例化 
    2、非lazy的單例bean 容器初始化時實例化 
    3、prototype等 getBean時實例化




    spring三種實例化bean的方式

    在spring中有三中實例化bean的方式:

    一、使用構造器實例化;

    二、使用靜態(tài)工廠方法實例化;

    三、使用實例化工廠方法實例化。

     

    每種實例化所采用的配置是不一樣的:

    一、使用構造器實例化;

    這種實例化的方式可能在我們平時的開發(fā)中用到的是最多的,因為在xml文件中配置簡單并且也不需要額外的工廠類來實現(xiàn)。

    <!--applicationContext.xml配置:-->

    <bean id="personService" class="cn.mytest.service.impl.PersonServiceBean"></bean>
     id是對象的名稱,class是要實例化的類,然后再通過正常的方式進調用實例化的類即可,比如:
    public void instanceSpring(){
                    //加載spring配置文件
    ApplicationContext ac = new ClassPathXmlApplicationContext(
    new String[]{
    "/conf/applicationContext.xml"
    });
    //調用getBean方法取得被實例化的對象。
    PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService");
    psb.save();
    }

    采用這種實例化方式要注意的是:要實例化的類中如果有構造器的話,一定要有一個無參的構造器。

     

    二、使用靜態(tài)工廠方法實例化;

    根據(jù)這個中實例化方法的名稱就可以知道要想通過這種方式進行實例化就要具備兩個條件:(一)、要有工廠類及其工廠方法;(二)、工廠方法是靜態(tài)的。OK,知道這兩點就好辦了,首先創(chuàng)建工程類及其靜態(tài)方法:

    package cn.mytest.service.impl;
    /**
    *創(chuàng)建工廠類
    *
    */
    public class PersonServiceFactory {
        //創(chuàng)建靜態(tài)方法
    public static PersonServiceBean createPersonServiceBean(){
             //返回實例化的類的對象
    return new PersonServiceBean();
    }
    }
    然后再去配置spring配置文件,配置的方法和上面有點不同,這里也是關鍵所在
    <!--applicationContext.xml配置:-->
    <bean id="personService1" class="cn.mytest.service.impl.PersonServiceFactory" factory-method="createPersonServiceBean"></bean>

     id是實例化的對象的名稱,class是工廠類,也就實現(xiàn)實例化類的靜態(tài)方法所屬的類,factory-method是實現(xiàn)實例化類的靜態(tài)方法。

    然后按照正常的調用方法去調用即可:

    public void instanceSpring(){
                    //加載spring配置文件
    ApplicationContext ac = new ClassPathXmlApplicationContext(
    new String[]{
    "/conf/applicationContext.xml"
    });
    //調用getBean方法取得被實例化的對象。
    PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService1");
    psb.save();
    }

    三、使用實例化工廠方法實例化。

    這個方法和上面的方法不同之處在與使用該實例化方式工廠方法不需要是靜態(tài)的,但是在spring的配置文件中需要配置更多的內容,,首先創(chuàng)建工廠類及工廠方法:

    package cn.mytest.service.impl;
    /**
    *創(chuàng)建工廠類
    *
    */
    public class PersonServiceFactory {
        //創(chuàng)建靜態(tài)方法
    public PersonServiceBean createPersonServiceBean1(){
             //返回實例化的類的對象
    return new PersonServiceBean();
    }
    }
    然后再去配置spring配置文件,配置的方法和上面有點不同,這里也是關鍵所在
    <!--applicationContext.xml配置:-->
    <bean id="personServiceFactory" class="cn.mytest.service.impl.PersonServiceFactory"></bean>
    <bean id="personService2" factory-bean="personServiceFactory" factory-method="createPersonServiceBean1"></bean>

     這里需要配置兩個bean,第一個bean使用的構造器方法實例化工廠類,第二個bean中的id是實例化對象的名稱,factory-bean對應的被實例化的工廠類的對象名稱,也就是第一個bean的id,factory-method是非靜態(tài)工廠方法。

     

     

    然后按照正常的調用方法去調用即可:

    public void instanceSpring(){
                    //加載spring配置文件
    ApplicationContext ac = new ClassPathXmlApplicationContext(
    new String[]{
    "/conf/applicationContext.xml"
    });
    //調用getBean方法取得被實例化的對象。
    PersonServiceBean psb = (PersonServiceBean) ac.getBean("personService2");
    psb.save();
    }
    posted on 2015-04-20 15:01 abin 閱讀(483) 評論(0)  編輯  收藏 所屬分類: spring
    主站蜘蛛池模板: 久久久久一级精品亚洲国产成人综合AV区 | 亚洲色偷偷综合亚洲AVYP| 亚洲另类无码专区首页| 久久久久国色AV免费看图片 | 妞干网在线免费视频| 中文字幕无码精品亚洲资源网久久 | 狠狠综合亚洲综合亚洲色| 在线观看91精品国产不卡免费| 在线观看日本亚洲一区| 成人黄页网站免费观看大全| 男人天堂2018亚洲男人天堂| 成年性羞羞视频免费观看无限| 亚洲精品无码久久久久A片苍井空| 四虎成人免费观看在线网址| 综合偷自拍亚洲乱中文字幕| 亚洲精品视频在线看| 中文精品人人永久免费| 亚洲国产另类久久久精品黑人| 久久久精品免费国产四虎| 亚洲网站在线播放| 成人免费视频网址| 一级看片免费视频| 亚洲国产香蕉碰碰人人| 永久免费毛片在线播放| 风间由美在线亚洲一区| 中文字幕精品无码亚洲字| 91av视频免费在线观看| 亚洲熟妇av午夜无码不卡| 亚洲毛片网址在线观看中文字幕| 国产午夜无码片免费| 亚洲欧洲尹人香蕉综合| 国产美女无遮挡免费视频 | 无码国产精品一区二区免费式芒果 | 国产四虎免费精品视频| 91亚洲va在线天线va天堂va国产| 亚洲最大免费视频网| 成人亚洲国产va天堂| 亚洲中文字幕视频国产| 免费能直接在线观看黄的视频 | 95免费观看体验区视频| 中国china体内裑精亚洲日本|