Spring中Bean的生命周期實(shí)例解析
Bean的生命周期
spring bean的生命周期官方的流程圖如下:
接下來 我們用代碼驗(yàn)證一下是否如圖所愿:
首先定義一個(gè)testBean
import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * * @author runtu * @version TestBean, v2.0 2019/12/13 9:19 **/ public class TestBean implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean { public TestBean() { System.out.println("=====================構(gòu)造方法========================"); } @Override public void setBeanName(String s) { System.out.println("=====================BeanNameAware========================"); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { System.out.println("=====================BeanFactoryAware========================"); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("=====================ApplicationContextAware========================"); } @Override public void afterPropertiesSet() { System.out.println("=====================InitializingBean========================"); } @Override public void destroy() { System.out.println("=====================DisposableBean========================"); } public void init() { System.out.println("=====================init========================"); } public void shutdown() { System.out.println("=====================shutdown========================"); } }
再定義一個(gè)自定義的MySpringBeanPostProcessor,主要是重寫了BeanPostProcessor接口的postProcessBeforeInitialization與postProcessAfterInitialization方法。
import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.stereotype.Component; /** * * @author runtu * @version MySpringBeanPostProcessor, v2.0 2019/12/13 9:25 **/ @Component public class MySpringBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof TestBean) { System.out.println( "=====================postProcessBeforeInitialization========================"); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof TestBean) { System.out.println( "=====================postProcessAfterInitialization========================"); } return bean; } }
此處我工程為springboot,把TestBean注入之后,啟動項(xiàng)目
@Bean(initMethod = "init", destroyMethod = "shutdown") public TestBean testBean() { return new TestBean(); }
把一些無關(guān)的日志剃掉之后,控制臺打印結(jié)果如下:
# 啟動程序之后控制臺依次打印:
=====================構(gòu)造方法========================
=====================BeanNameAware========================
=====================BeanFactoryAware========================
=====================ApplicationContextAware========================
=====================postProcessBeforeInitialization========================
=====================InitializingBean========================
=====================init========================
=====================postProcessAfterInitialization========================
# 停止程序之后依次打?。?br />=====================DisposableBean========================
=====================shutdown========================
到此這篇關(guān)于Spring中Bean的生命周期實(shí)例解析的文章就介紹到這了,更多相關(guān)Bean的生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springbootAOP定義切點(diǎn)獲取/修改請求參數(shù)方式
這篇文章主要介紹了springbootAOP定義切點(diǎn)獲取/修改請求參數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Go?Java算法之為運(yùn)算表達(dá)式設(shè)計(jì)優(yōu)先級實(shí)例
這篇文章主要為大家介紹了Go?Java算法之為運(yùn)算表達(dá)式設(shè)計(jì)優(yōu)先級實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Java實(shí)現(xiàn)短信驗(yàn)證碼服務(wù)的完整代碼示例
這篇文章主要介紹了Java實(shí)現(xiàn)短信驗(yàn)證碼服務(wù)的完整代碼示例,文中使用阿里云的短信服務(wù)進(jìn)行應(yīng)用開發(fā)的流程,包括將屬性寫入application.yml配置文件,定義類并指定配置文件,注入實(shí)體類對象等等,需要的朋友可以參考下2024-09-09Java?中的?clone(?)?和?new哪個(gè)效率更高
很多朋友不太清楚clone()和new那個(gè)更快?針對這個(gè)問題我百度了好多資料,最終小編總結(jié)下關(guān)于Java?中的?clone(?)?和?new哪個(gè)效率更高的問題,感興趣的朋友跟隨小編一起看看吧2021-12-12java環(huán)境中的JDK、JVM、JRE詳細(xì)介紹
這篇文章主要介紹了java環(huán)境中的JDK、JVM、JRE詳細(xì)介紹的相關(guān)資料,對于初學(xué)者還是有必要了解下,細(xì)致說明他們是什么,需要的朋友可以參考下2016-11-11Java中StringUtils與CollectionUtils和ObjectUtil概念講解
這篇文章主要介紹了Java中StringUtils與CollectionUtils和ObjectUtil概念,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12