日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring Bean的生命周期及接口回调

發(fā)布時(shí)間:2025/3/15 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Bean的生命周期及接口回调 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇介紹Spring框架為Spring Bean生命周期各階段提供的回調(diào)接口,程序通過(guò)實(shí)現(xiàn)回調(diào)接口,可以在IOC容器實(shí)例化或銷毀Bean的過(guò)程中,得到Bean的控制權(quán),并對(duì)Bean進(jìn)行預(yù)處理工作。通過(guò)本篇的學(xué)習(xí),可以達(dá)成如下目標(biāo)。

● 了解Spring Bean的生命周期

● 掌握和運(yùn)用Spring Bean生命周期各階段提供的接口

● 能夠?qū)pring Bean做預(yù)處理工作

Spring Bean雖然由IOC容器管理,不需要程序過(guò)多干預(yù)。但在一些情況下,程序可能需要在容器之外,對(duì)Bean進(jìn)行一些處理工作。如IOC容器實(shí)例化Bean時(shí),程序?qū)ean進(jìn)行一些初始化工作,或者IOC容器銷毀Bean時(shí),程序?qū)ean做一些數(shù)據(jù)的保存或清除工作。

Spring Bean從創(chuàng)建、運(yùn)行到銷毀經(jīng)歷了若干階段,在Bean生命周期的每個(gè)階段,程序都可以通過(guò)初始化回調(diào)、在配置文件中聲明方法、前置或后置處理等技術(shù)獲取Bean的控制權(quán),對(duì)Bean進(jìn)行處理工作。Bean生命周期的各個(gè)階段如下圖所示。

回調(diào)Aware接口

當(dāng)Spring IOC容器內(nèi)的Bean對(duì)象實(shí)例化完成并且相關(guān)屬性以及依賴設(shè)置完成后,IOC容器會(huì)檢查當(dāng)前Bean對(duì)象是否實(shí)現(xiàn)Aware接口,如果實(shí)現(xiàn)了Aware接口,則調(diào)用Bean已經(jīng)實(shí)現(xiàn)的Aware接口。Bean通過(guò)實(shí)現(xiàn)這些接口,可以增強(qiáng)Bean的功能,但是也增加了對(duì)Spring容器的依賴。

表 1 可以實(shí)現(xiàn)的Aware接口列表

?

例1:實(shí)現(xiàn)BeanNameAware接口

修改課程案例Teacher類,實(shí)現(xiàn)BeanNameAware接口。

setBeanName為實(shí)現(xiàn)的接口,接口簡(jiǎn)單輸出bean的名稱。運(yùn)行結(jié)果如下圖所示。

從輸出結(jié)果可以看出,Teacher類實(shí)現(xiàn)了BeanNameAware接口后,IOC容器將回調(diào)Bean實(shí)現(xiàn)的BeanNameAware接口的setBeanName方法。

前置處理和后置處理器BeanPostProcessor

前置處理是指程序在Spring IOC容器初始化Bean之前、屬性設(shè)置之后對(duì)該Bean先做一些預(yù)處理工作。Spring提供了BeanPostProcessors接口,Bean通過(guò)實(shí)現(xiàn)該接口的postProcessBeforeInitialization和postProcessAfterInitialization方法,可以在Bean初始化之前或初始化之后做前置處理和后置處理操作。

例2:實(shí)現(xiàn)BeanPostProcessor的前置和后置接口

修改課程案例Teacher類,實(shí)現(xiàn)postProcessBeforeInitialization前置接口和postProcessAfterInitialization后置接口。

?

建立beanpost.xml配置文件

建立BeanPostTest類文件。

?

執(zhí)行BeanPostTest類文件,輸出結(jié)果如下圖所示。

回調(diào)InitializingBean接口

InitializingBean接口為Bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化Bean的時(shí)候會(huì)執(zhí)行該方法。

例3:實(shí)現(xiàn)InitializingBean接口

修改課程案例Teacher類,實(shí)現(xiàn)InitializingBean接口的afterPropertiesSet方法。

配置init-method方法

在Spring配置文件中,可以使用 init-method 屬性來(lái)指定帶有 void 無(wú)參數(shù)方法的名稱,該方法在Bean實(shí)例完成創(chuàng)建后調(diào)用。

例4:實(shí)現(xiàn)init-method方法

修改beanpost.xml配置文件,在配置文件中添加init-method屬性。

修改Teacher類,添加init方法。

執(zhí)行BeanPostTest文件,輸出結(jié)果如下圖所示。

從上圖可以看出,實(shí)現(xiàn)InitializingBean接口的afterPropertiesSet方法首先被調(diào)用,然后init方法被調(diào)用。

回調(diào)DisposableBean接口

DisposableBean接口為釋放Bean提供了釋放資源的方法,它只包括destory方法,凡是繼承該接口的類,在釋放Bean的時(shí)候會(huì)執(zhí)行該方法。

例5:實(shí)現(xiàn)DisposableBean接口

修改課程案例Teacher類,實(shí)現(xiàn)DisposableBean接口的destroy方法。

?

配置destroy-method方法

在Spring配置文件中,可以使用 destroy-method 屬性來(lái)指定帶有 void 無(wú)參數(shù)方法的名稱,該方法在Bean實(shí)例銷毀后調(diào)用。

例5:實(shí)現(xiàn)destroy-method方法

修改beanpost.xml配置文件,在配置文件中添加destroy-method屬性。

修改Teacher類,添加destroy_mehtod方法。

?

課程小結(jié)

IOC容器創(chuàng)建Bean并設(shè)置Bean屬性后,將執(zhí)行以下操作:(1)檢查Aware接口,如果Bean實(shí)現(xiàn)了Aware接口,則執(zhí)行回調(diào);(2)檢查和回調(diào)BeanPostProcessor的前置處理接口;(3)執(zhí)行Bean的初始化工作,并調(diào)用InitializingBean接口,如果在配置文件中Bean定義了init-method屬性,則同時(shí)調(diào)用init-method屬性指定的方法;(4)Bean初始化完成后,IOC容器會(huì)調(diào)用BeanPostProcessor的后置處理接口;(5)Bean進(jìn)入運(yùn)行階段;(6)Bean被銷毀時(shí)調(diào)用DisposableBean接口,如果在配置文件中Bean定義了destroy_mehtod屬性,則同時(shí)調(diào)用destroy_mehtod屬性指定的方法。

總結(jié)

以上是生活随笔為你收集整理的Spring Bean的生命周期及接口回调的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。