Java Spring Bean的生命周期管理詳解
更新時間:2021年12月23日 11:22:50 作者:大樹下躲雨
這篇文章主要為大家介紹了Java Spring Bean的生命周期管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
Spring Bean的生命周期管理
一、Spring Bean的生命周期
通過以下方式來指定Bean的初始化和銷毀方法, 當Bean為單例時,Bean歸Spring容器管理,Spring容器關閉,就會調用Bean的銷毀方法 當Bean為多例時,Bean不歸Spring容器管理,Spring容器關閉,不會調用Bean的銷毀方法
二、通過@Bean的參數(initMethod ,destroyMethod)指定Bean的初始化和銷毀方法
1、項目結構
2、Person
public class Person { public Person(){ System.out.println("Person 創(chuàng)建了..."); } public void init(){ System.out.println("Person 初始化了..."); } public void destroy(){ System.out.println("Person 被銷毀了..."); } }
3、Bean注冊配置類(單實例)
import com.dashu.bean.Person; import org.springframework.context.annotation.*; @Configuration public class BeanConfig { @Bean(initMethod = "init",destroyMethod = "destroy") public Person person(){ return new Person(); } }
4、測試類
import com.dashu.bean.Person; import com.dashu.config.BeanConfig; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { //加載配置類獲取容器 AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(BeanConfig.class); //獲取Bean Person bean = annotationConfigApplicationContext.getBean(Person.class); //關閉容器 annotationConfigApplicationContext.close(); } }
5、測試結果
6、Bean注冊配置類(多實例)
import com.dashu.bean.Person; import org.springframework.context.annotation.*; @Configuration public class BeanConfig { @Scope("prototype") @Bean(initMethod = "init",destroyMethod = "destroy") public Person person(){ return new Person(); } }
7、測試結果
三、Bean實現接口InitializingBean, DisposableBean
1、Person
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; public class Person implements InitializingBean, DisposableBean { public Person(){ System.out.println("Person 創(chuàng)建了..."); } @Override public void afterPropertiesSet() throws Exception { System.out.println("Person 初始化了..."); } @Override public void destroy() throws Exception { System.out.println("Person 被銷毀了..."); } }
2、Bean注冊配置類
import com.dashu.bean.Person; import org.springframework.context.annotation.*; @Configuration public class BeanConfig { @Bean public Person person(){ return new Person(); } }
3、測試結果
四、通過注解@PostConstruct和@PreDestroy
@PostConstruct:標注在Bean的初始化方法上 @PreDestroy:標注在Bean的銷毀方法上
1、Person
import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class Person { public Person(){ System.out.println("Person 創(chuàng)建了..."); } @PostConstruct public void init(){ System.out.println("Person 初始化了..."); } @PreDestroy public void destroy(){ System.out.println("Person 被銷毀了..."); } }
2、測試結果
五、使用接口BeanPostProcessor實現類(后置處理器)
1、項目結構
2、Person
import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @Component public class Person { public Person(){ System.out.println("Person 創(chuàng)建了..."); } @PostConstruct public void init(){ System.out.println("Person 初始化了..."); } @PreDestroy public void destroy(){ System.out.println("Person 被銷毀了..."); } }
3、Bean注冊配置類
import org.springframework.context.annotation.*; @Configuration @ComponentScan({"com.dashu"}) public class BeanConfig { }
4、BeanPostProcessor實現類(后置處理器)
import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; /** * 后置處理器:初始化前后進行處理工作 */ @Component public class MyBeanPostProcessor implements BeanPostProcessor { /** * 初始化之前工作 * @param bean * @param beanName * @return * @throws BeansException */ @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("初始化之前..."+beanName+"=["+bean+"]"); return bean; } /** * 初始化之后工作 * @param bean * @param beanName * @return * @throws BeansException */ @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("初始化之后..."+beanName+"=["+bean+"]"); return bean; } }
5、測試結果
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
Mybatis-plus使用selectList查詢數據為null的問題及解決辦法
這篇文章主要介紹了Mybatis-plus使用selectList查詢數據為null的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07整理Java的MyBatis框架中一些重要的功能及基本使用示例
這篇文章主要介紹了Java的MyBatis框架中一些重要的功能及基本使用示例整理,MyBatis可以幫助Java程序進行強大的數據庫操作,需要的朋友可以參考下2016-04-04解決mybatis-generator生成Mapper文件沒有Selective結尾的問題
這篇文章主要介紹了解決mybatis-generator生成Mapper文件沒有Selective結尾的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09jdk-logging?log4j?logback日志系統實現機制原理介紹
這篇文章主要介紹了jdk-logging、log4j、logback日志介紹以及三個日志系統的實現機制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03