Spring中Bean的生命周期方法

Spring中的Bean對(duì)象通過(guò)繼承一系列接口,以及在ApplicationContext.xml文件中配置饰迹,可以形成其從初始化到結(jié)束銷毀生命周期,這些生命周期方法,可以構(gòu)成Bean的生命周期赦颇,大致記住這些方法,將在以后的開(kāi)發(fā)中事半功倍赴涵,特地再次記錄媒怯,方便日后查看.新手學(xué)習(xí),如有錯(cuò)誤髓窜,還望指出扇苞,謝謝!

Setp 1:Bean的無(wú)參構(gòu)造方法

在之前首先執(zhí)行的是Bean的無(wú)參構(gòu)造方法

    public IServiceImpl() {
        System.out.println("Step 1:執(zhí)行了Bean的無(wú)參構(gòu)造器方法");

    }

Step 2:執(zhí)行了Bean中的set方法

Bean中可以通過(guò)注冊(cè)bean標(biāo)簽的時(shí)候設(shè)置屬性值,如下面的代碼示例中纱烘,其屬性為name杨拐,設(shè)置參數(shù)是NameValue,但是前提條件要求Bean類的代碼中含有SetName()這個(gè)方法擂啥。

   <bean id="servicesImpl" class="com.zhoutao.service.IServiceImpl"
         init-method="initFunction"
         destroy-method="overFunction">
       <!--設(shè)置Bean中的屬性值-->
       <property name="name" value="NameValue"></property>

   </bean>

其代碼如下:

  private String name;
  public void setName(String name) {
       this.name = name;
       System.out.println("Step 2:執(zhí)行了SetName方法,Bean的設(shè)置屬性方法");
   }

Step 3:執(zhí)行了獲取BeanName的方法

Bean通過(guò)繼承BeanNameAware接口哄陶,可以實(shí)現(xiàn)獲取BeanName的方法,這個(gè)BeanName也就是在ApplicationContext.xml文件中生命的id,其代碼如下所示:

public interface BeanNameAware extends Aware {
   void setBeanName(String name);
   //結(jié)合Step2的bean注冊(cè)的內(nèi)容哺壶,那么nam的值將是servicesImpl屋吨,也就是id
}

//Bean 中繼承BeanNameAware接口之后重寫的方法
  @Override
   public void setBeanName(String name) {
       System.out.println("Step 3:執(zhí)行了獲取BeanName的方法,此方法來(lái)自BeanNameAware,獲取到id是:"+name);
   }

Step 4:執(zhí)行了獲取BeanFactory的方法

Bean通過(guò)繼承BeanFactoryAware接口,可以實(shí)現(xiàn)設(shè)置BeanFactory的方法山宾,其代碼如下所示:

public interface BeanFactoryAware extends Aware {

    void setBeanFactory(BeanFactory beanFactory) throws BeansException;

}
//Bean中繼承BeanFactoryAware接口之后重寫的方法
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("Step 4:執(zhí)行了獲取BeanFactory的方法,此方法來(lái)自BeanFactoryAware接口");
    }

Setp 5:執(zhí)行了Bean后處理器中初始化

首先看一下Bean后處理器類的寫法至扰,其繼承了BeanPostProcessor接口,實(shí)現(xiàn)了其兩個(gè)方法:

  • postProcessBeforeInitialization(Object bean, String beanName)
  • postProcessAfterInitialization(final Object bean, String beanName)

這兩個(gè)方法將分別在Bean初始化完成和初始化之后調(diào)用资锰。

public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("Setp 5:執(zhí)行了Bean后處理器中的方法:postProcessBeforeInitialization");
        return bean;
    }

        //.......
}

Step 6:Bean初始化完成,此方法來(lái)自InitializingBean接口

在Bean初始化完成之后敢课,如果Bean繼承了InitializingBean接口,那么將會(huì)調(diào)用其接口的方法void afterPropertiesSet()

 @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Step 6:Bean初始化完成,此方法來(lái)自InitializingBean接口");
    }

Setp 7: 執(zhí)行了Bean的初始化方法

在定義Bean的時(shí)候,我們可以通過(guò)設(shè)置屬性來(lái)設(shè)置在Bean初始化完成和銷毀之后的執(zhí)行方法直秆,代碼參照Setp2的xml文件

  • init-method="initFunction" 初始化方法
  • destroy-method="overFunction" 銷毀方法

此方法定義與ApplicationContext.xml文件中定義,這里由于我把這兩個(gè)函數(shù)的聲明寫在了Bean繼承的接口中濒募,因此會(huì)出現(xiàn)@Override注解,自己隨意寫一個(gè)方法也可圾结,但一定要在ApplicationContext.xml文件中聲明注冊(cè)瑰剃,其代碼如下所示:

   @Override
    public void initFunction() {
        System.out.println("Setp 7:執(zhí)行了Bean的初始化方法,此方法定義與ApplicationContext.xml文件中dingyi");
    }

Setp 8:執(zhí)行了Bean后處理器中的初始化完成方法

參照Step 5

public class MyBeanPostProcessor implements BeanPostProcessor {
    //......
    
    @Override
    public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException {
        System.out.println("Setp 8:執(zhí)行了Bean后處理器中的方法:postProcessAfterInitialization");
        return bean;
    }
}

Step 9:執(zhí)行Bean的業(yè)務(wù)方法

Bean的業(yè)務(wù)方法,是定義在Bean中的方法筝野,這個(gè)隨意晌姚,此方法才是我們執(zhí)行需要做的事情的方法

   @Override
    public String doExecute(String name) {
        System.out.println("Step 9:執(zhí)行Bean的核心方法");
        return "zhoutao";
    }

Step 10:Bean進(jìn)行銷毀,此方法來(lái)自DisposableBean接口

    @Override
    public void destroy() throws Exception {
        System.out.println("Step 10:Bean進(jìn)行銷毀,此方法來(lái)自DisposableBean接口");
    }

Setp 11:執(zhí)行了Bean的結(jié)束方法

參照Setp 7,注意在測(cè)試類中需要調(diào)用容器的Close方法歇竟,才會(huì)調(diào)用本方法挥唠,否則不會(huì)調(diào)用,但是我們一般使用的容器是ApplicationContext途蒋,其沒(méi)有close方法猛遍,可以強(qiáng)轉(zhuǎn)為ClassPathXmlApplicationContext,然后調(diào)用close方法

    @Override
    public void overFunction() {
        System.out.println("Setp 11:執(zhí)行了Bean的結(jié)束方法");
    }

新手學(xué)習(xí)号坡,如有錯(cuò)誤懊烤,還望指出,謝謝宽堆!
本人博客原文鏈接腌紧,歡迎交流

本博客內(nèi)容一致同步到本人的博客站點(diǎn):http://www.zhoutaotao.xyz 歡迎訪問(wèn)留言交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市畜隶,隨后出現(xiàn)的幾起案子壁肋,更是在濱河造成了極大的恐慌,老刑警劉巖籽慢,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浸遗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡箱亿,警方通過(guò)查閱死者的電腦和手機(jī)跛锌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)届惋,“玉大人髓帽,你說(shuō)我怎么就攤上這事∧员” “怎么了郑藏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瘩欺。 經(jīng)常有香客問(wèn)我必盖,道長(zhǎng)拌牲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任筑悴,我火速辦了婚禮们拙,結(jié)果婚禮上稍途,老公的妹妹穿的比我還像新娘阁吝。我一直安慰自己,他們只是感情好械拍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布突勇。 她就那樣靜靜地躺著,像睡著了一般坷虑。 火紅的嫁衣襯著肌膚如雪甲馋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,954評(píng)論 1 283
  • 那天迄损,我揣著相機(jī)與錄音定躏,去河邊找鬼。 笑死芹敌,一個(gè)胖子當(dāng)著我的面吹牛痊远,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氏捞,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碧聪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了液茎?” 一聲冷哼從身側(cè)響起逞姿,我...
    開(kāi)封第一講書(shū)人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捆等,沒(méi)想到半個(gè)月后滞造,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栋烤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年谒养,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片班缎。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝴光,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出达址,到底是詐尸還是另有隱情蔑祟,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布沉唠,位于F島的核電站疆虚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜径簿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一罢屈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篇亭,春花似錦缠捌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至柔昼,卻和暖如春哑芹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捕透。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工聪姿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乙嘀。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓末购,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親乒躺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子招盲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容