spring 入門例子--spring bean裝配(生命周期药版、初始化與注銷)

本文需要的例子是在“spring 入門例子--spring注入方式”基礎上
spring 入門例子--spring注入方式

Scope作用域

  • 創(chuàng)建BeanScope類

package com.younghare.bean;

public class BeanScope {
    public void sayHello() {
        //hashcode可以區(qū)分實例德召;創(chuàng)建2次查看測試實例的hachcode是否相同白魂,如果相同這標識同一個實例
        System.out.println("BeanScope Sayhello 實例hashcode:"+this.hashCode());

    }
}

copy applicationContext.xml ->spring-beanscope.xml

  • 配置scopye為單例模式

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    <bean id="beanScope" 
        class ="com.younghare.bean.BeanScope" 
        scope="singleton">
    </bean>

</beans>

-###創(chuàng)建測試用例UnitTestBaseScopeTest

package com.younghare;

import static org.junit.Assert.*;

import org.junit.Test;

import com.younghare.bean.BeanScope;

public class UnitTestBaseScopeTest extends UnitTestBase {

    public UnitTestBaseScopeTest() {
        super("classpath:spring-beanscope.xml");

    }

    @Test
    public void testSayHello() {
        //創(chuàng)建2次查看測試實例的hachcode是否相同,如果相同這標識同一個實例
        BeanScope beanScope =super.getBean("beanScope");
        beanScope.sayHello();
        
        BeanScope beanScope2 =super.getBean("beanScope");
        beanScope2.sayHello();

    }

}

  • 運行測試用例

image.png

-### 修改Scope ="prototype"
在運行測試用例


image.png

Bean生命周期-配置方式1

  • 創(chuàng)建BeanLiftCycle類

package com.younghare.bean;

public class BeanLiftCycle {
    public void start() {
        System.out.println("Bean start 在xml中已經配置初始化方法init-method");     
    }
    public void stop() {
        System.out.println("Bean stop 在xml中已經配置初始化方法destroy-method");       

    }

}
  • 配置文件spring-lifecycle.xml(類似applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

    <!--配置 bean的初始化上岗、銷毀方法 -->
    <bean id="beanScope" 
        class ="com.younghare.bean.BeanLiftCycle" 
        init-method="start"
        destroy-method="stop"
        >
    </bean>

</beans>
image.png
  • 創(chuàng)建單元測試類TestBeanLiftCycle

package com.younghare;

import static org.junit.Assert.*;

import org.junit.Test;

import com.younghare.bean.BeanLiftCycle;

public class TestBeanLiftCycle extends UnitTestBase {

    public TestBeanLiftCycle() {
        super("classpath:spring-lifecycle.xml");
    }

    @Test
    public void testLiftCycle() {
        BeanLiftCycle beanLiftCycle = super.getBean("beanLiftCycle");

    }

}

測試結果


image.png

Bean生命周期-實現接口方式2

-###BeanLiftCycle實現接口InitializingBean,DisposableBean
接口是
org.springframework.beans.factory.DisposableBean;
org.springframework.beans.factory.InitializingBean;


image.png
  • 修改spring-lifecycle.xml配置(刪除初始化與銷毀的配置)

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

    <!--不去--配置 bean的初始化福荸、銷毀方法 -->
       <!-- init-method="start"   destroy-method="stop" -->
    <bean id="beanLiftCycle" 
        class ="com.younghare.bean.BeanLiftCycle" 

        >
    </bean>

</beans>

運行測試用例


image.png

Bean生命周期-默認方式3(默認方法省略。肴掷。敬锐。)

默認方法注意在bean中提供對應的接口


image.png

當3上方式方式同時使用時

當3上方式方式同時使用時順序是
接口的方式》配置的init-method 和destory-method
而默認的初始化就不生效

Aware(實現Aware接口可以獲取相應資源)

接口可以獲得ioc容器
org.springframework.context.ApplicationContextAware
可以攔截設置BeanName 的
org.springframework.beans.factory.BeanNameAware

  • 創(chuàng)建類BeanApplicationContextAware

public class BeanApplicationContextAware implements ApplicationContextAware{

    @Override
    public void setApplicationContext(ApplicationContext arg0)
            throws BeansException {
        System.out.println("setApplicationContext方法中"
            +arg0.getBean("beanApplicationContextAware").hashCode());
        
    }

}


  • 創(chuàng)建類BeanNameAware

  • spring xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">


    <bean id="beanApplicationContextAware" 
        class ="com.younghare.bean.BeanApplicationContextAware" 
        >
    </bean>

</beans>
  • 測試用例

image.png
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捆等,隨后出現的幾起案子滞造,更是在濱河造成了極大的恐慌,老刑警劉巖栋烤,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谒养,死亡現場離奇詭異,居然都是意外死亡明郭,警方通過查閱死者的電腦和手機买窟,發(fā)現死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薯定,“玉大人始绍,你說我怎么就攤上這事』爸叮” “怎么了亏推?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長年堆。 經常有香客問我吞杭,道長,這世上最難降的妖魔是什么变丧? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任芽狗,我火速辦了婚禮,結果婚禮上痒蓬,老公的妹妹穿的比我還像新娘童擎。我一直安慰自己滴劲,他們只是感情好,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布顾复。 她就那樣靜靜地躺著班挖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捕透。 梳的紋絲不亂的頭發(fā)上聪姿,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機與錄音乙嘀,去河邊找鬼末购。 笑死,一個胖子當著我的面吹牛虎谢,可吹牛的內容都是我干的盟榴。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼婴噩,長吁一口氣:“原來是場噩夢啊……” “哼擎场!你這毒婦竟也來了?” 一聲冷哼從身側響起几莽,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤迅办,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后章蚣,有當地人在樹林里發(fā)現了一具尸體站欺,經...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年纤垂,在試婚紗的時候發(fā)現自己被綠了矾策。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡峭沦,死狀恐怖贾虽,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情吼鱼,我是刑警寧澤蓬豁,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站菇肃,受9級特大地震影響地粪,放射性物質發(fā)生泄漏。R本人自食惡果不足惜巷送,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一弛针、第九天 我趴在偏房一處隱蔽的房頂上張望灶体。 院中可真熱鬧,春花似錦、人聲如沸涵但。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肃廓。三九已至,卻和暖如春陈哑,著一層夾襖步出監(jiān)牢的瞬間妻坝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工惊窖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刽宪,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓界酒,卻偏偏與公主長得像圣拄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毁欣,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理庇谆,服務發(fā)現,斷路器凭疮,智...
    卡卡羅2017閱讀 134,719評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,868評論 6 342
  • 文章作者:Tyan博客:noahsnail.com 3.5 Bean scopes When you create...
    SnailTyan閱讀 1,895評論 0 1
  • 一 登陸自己的微信公眾平臺执解,打開素材管理寞肖,可以看到這一段時間寫的文章整整齊齊的排列在那里。咋一看上去感覺挺像回事的...
    蛙跳上山閱讀 373評論 0 1
  • 昨天翻看了一下材鹦,自己之前的QQ心情記錄逝淹,之前沒有微信,都是QQ記錄桶唐,發(fā)現自己真的是一個喜歡寫心情的人栅葡。那么多條記錄...
    夏末夏墨閱讀 401評論 0 2