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

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

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

    sblig

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      10 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

    最后 遺留一個問題,繼續探索中....

    ?

    ?

    跟我學Spring3 學習筆記一

    跟我學Spring3 學習筆記二

    跟我學Spring3 學習筆記三

    跟我學Spring3 學習筆記四

    跟我學Spring3 學習筆記五 注入

    跟我學Spring3 學習筆記六 注入

    ?

    統一接口:

    ?

    public interface HelloApi {
    	public void sayHello();  
    }
    

    ?

    ?

    一、延遲初始化:

    ?

    /**
     * 延遲初始化Bean
     *     延遲初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用時才創建及初始化Bean。
     *     配置方式很簡單只需在<bean>標簽上指定 “lazy-init” 屬性值為“true”即可延遲初始化Bean。
     */
    public class DiLazyInit implements HelloApi{
    
    	public void sayHello() {
    		System.out.println("say DiInitDestory");
    	}
    	
    	public DiLazyInit(){
    		System.out.println("初始化 DiInitDestory");
    	}
    }

    ?

    ?

    配置延遲初始化:

    ?

    ?

    <!-- 延遲初始化Bean 
    	     延遲初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用時才創建及初始化Bean。
    	     配置方式很簡單只需在<bean>標簽上指定 “lazy-init” 屬性值為“true”即可延遲初始化Bean。 -->
    	<bean id="lazyinitDi" class="com.diinit.DiLazyInit"
    		lazy-init="true">
    	</bean>

    ?

    ?junit 進行測試:

    ?

    @Test
    	public void testLazyInit(){
    		ApplicationContext context = new ClassPathXmlApplicationContext("initdepends.xml");
    		HelloApi lazyInit = context.getBean("lazyinitDi",HelloApi.class);
    		lazyInit.sayHello();
    		System.out.println("");
    	}
    ?

    ?

    注意這個時候的輸出結果:

    ?

    ?

    初始化 DiLazyInit

    say DiLazyInit

    ?

    ?

    ?

    ?

    二、 可以指定初始化和銷毀的順序

    ?

    ?

    /* 使用depends-on 是指 指定Bean初始化及銷毀時的順序,使用depends-on屬性指定的Bean要先初始化完畢
    *     后才初始化當前Bean,由于只有“singleton”Bean能被Spring管理銷毀,所以當指定的Bean都是“singleton”
    *     時,使用depends-on屬性指定的Bean要在指定的Bean之后銷毀。
    *     “decorator”指定了“depends-on”屬性為“lazyinitDi”,所以在“decorator”Bean初始化之前要先初
    *     始化“lazyinitDi”,而在銷毀“lazyinitDi”之前先要銷毀“decorator”,大家注意一下銷毀順序,與文檔上的不符。
    *     “depends-on”屬性可以指定多個Bean,若指定多個Bean可以用“;”、“,”、空格分割。
    *     
    *  那“depends-on”有什么好處呢?
    *     主要是給出明確的初始化及銷毀順序,比如要初始化“decorator”時要確保“lazyinitDi”Bean的資源準備好了,
    *     否則使用“decorator”時會看不到準備的資源;而在銷毀時要先在“decorator”Bean的把對“helloApi”資源的引用釋
    *     放掉才能銷毀“lazyinitDi”,否則可能銷毀 “lazyinitDi”時而“decorator”還保持著資源訪問,造成資源不能釋放或釋放錯誤。
    */
    public class ApiDecorator implements HelloApi{
    
    	private HelloApi helloApi;
    	
    	public ApiDecorator(){
    		System.out.println("初始化 ApiDecorator");
    	}
    	
    	public void sayHello() {
    		System.out.println("say ApiDecorator");
    		helloApi.sayHello();
    		
    	}
    
    	public HelloApi getHelloApi() {
    		return helloApi;
    	}
    
    	public void setHelloApi(HelloApi helloApi) {
    		this.helloApi = helloApi;
    	}
    }
    ?

    ?

    配置xml指定初始化和銷毀順序:

    ?

    <!-- 初始化及銷毀時的順序    
    	     “decorator”指定了“depends-on”屬性為“lazyinitDi”,所以在“decorator”Bean初始化之前
    	     要先初始化“lazyinitDi”,而在銷毀“lazyinitDi”之前先要銷毀“decorator”,大家注意一下銷毀順序 -->
    	<bean id="decorator" class="com.diinit.ApiDecorator"
    		depends-on="lazyinitDi">
    		<property name="helloApi">
    			<ref bean="lazyinitDi" />
    		</property>
    	</bean>
    ?

    ?

    ?

    ?junit 進行測試:

    ?

    @Test
    	public void testLazyInit(){
    		ApplicationContext context = new ClassPathXmlApplicationContext("initdepends.xml");
    		HelloApi lazyInit = context.getBean("lazyinitDi",HelloApi.class);
    		lazyInit.sayHello();
    		System.out.println("");
    	}
    	
    	@Test
    	public void testDependsOn(){
    		ApplicationContext context= new ClassPathXmlApplicationContext("initdepends.xml");
    		HelloApi depends = context.getBean("decorator",HelloApi.class);
    		depends.sayHello();
    	}
    ?

    ?

    注意這個時候的輸出結果:

    ?

    ?

    初始化 DiLazyInit

    初始化 ApiDecorator ? ? ? ? ? ?//也是上面同樣的測試函數 testLazyInit(),同樣的配置 ?這句是多打印出來的

    say DiLazyInit

    ?

    初始化 DiLazyInit

    初始化 ApiDecorator

    say ApiDecorator

    say DiLazyInit


    ?

    ?

    ?

    這突然多出來的打印結果,說明進行了ApiDecorator的對象的創建,

    但是在第一個配置中也沒涉及到?ApiDecorator 類的加載,注入 ?。

    ?

    什么原因造成的呢?是一種隱藏的注入? 繼續探索中....

    ?

    ?



    已有 1 人發表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted on 2012-10-18 16:45 李凡 閱讀(164) 評論(0)  編輯  收藏

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 日韩在线观看免费| 亚洲精华国产精华精华液网站 | 亚洲免费在线观看| 亚洲人成国产精品无码| 黄页视频在线观看免费| gogo全球高清大胆亚洲| 国产精品小视频免费无限app | 久久国产精品免费| 亚洲一区爱区精品无码| 免费一区二区无码东京热| 亚洲高清国产AV拍精品青青草原| 无码人妻AV免费一区二区三区| 亚洲视频在线免费看| 99精品全国免费观看视频| 小说区亚洲自拍另类| 国产亚洲美女精品久久久| 国产免费无码AV片在线观看不卡| 亚洲一卡2卡三卡4卡有限公司| 97av免费视频| 18禁亚洲深夜福利人口| 国产成人毛片亚洲精品| 99re6在线视频精品免费下载| 亚洲一区动漫卡通在线播放| 国产精品成人免费综合| 美女被免费网站91色| 亚洲福利一区二区三区| 国产精品成人无码免费| 久久久久久成人毛片免费看| 亚洲免费电影网站| 高清在线亚洲精品国产二区| 中文字幕乱码免费看电影| 亚洲成a人不卡在线观看| 全亚洲最新黄色特级网站 | 亚洲乱码精品久久久久..| 日韩在线播放全免费| 女bbbbxxxx另类亚洲| 国产AV无码专区亚洲AV毛网站| 毛片a级毛片免费播放下载| 久久免费99精品国产自在现线| 亚洲一卡2卡3卡4卡国产网站| 精品亚洲成α人无码成α在线观看 |