Spring中Bean的生命周期實例解析
Bean的生命周期
spring bean的生命周期官方的流程圖如下:

接下來 我們用代碼驗證一下是否如圖所愿:
首先定義一個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========================");
}
}再定義一個自定義的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注入之后,啟動項目
@Bean(initMethod = "init", destroyMethod = "shutdown")
public TestBean testBean() {
return new TestBean();
}把一些無關(guān)的日志剃掉之后,控制臺打印結(jié)果如下:
# 啟動程序之后控制臺依次打?。?br />=====================構(gòu)造方法========================
=====================BeanNameAware========================
=====================BeanFactoryAware========================
=====================ApplicationContextAware========================
=====================postProcessBeforeInitialization========================
=====================InitializingBean========================
=====================init========================
=====================postProcessAfterInitialization========================
# 停止程序之后依次打印:
=====================DisposableBean========================
=====================shutdown========================
到此這篇關(guān)于Spring中Bean的生命周期實例解析的文章就介紹到這了,更多相關(guān)Bean的生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于java.lang.NumberFormatException: null的問題及解決
這篇文章主要介紹了關(guān)于java.lang.NumberFormatException: null的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
詳解快速排序算法中的區(qū)間劃分法及Java實現(xiàn)示例
這篇文章主要介紹了詳解快速排序算法中的區(qū)間劃分法及Java實現(xiàn)示例,文中分別介紹了快排時兩種區(qū)間劃分的思路,需要的朋友可以參考下2016-04-04
SpringBoot中使用AOP切面編程實現(xiàn)登錄攔截功能
本文介紹了如何使用AOP切面編程實現(xiàn)Spring Boot中的登錄攔截,通過實例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-12-12
SpringBoot中如何統(tǒng)一接口返回與全局異常處理詳解
全局異常處理是個比較重要的功能,一般在項目里都會用到,這篇文章主要給大家介紹了關(guān)于SpringBoot中如何統(tǒng)一接口返回與全局異常處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09

