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的參數(shù)(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實現(xiàn)接口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實現(xiàn)類(后置處理器)
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實現(xiàn)類(后置處理器)
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查詢數(shù)據為null的問題及解決辦法
這篇文章主要介紹了Mybatis-plus使用selectList查詢數(shù)據為null的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
整理Java的MyBatis框架中一些重要的功能及基本使用示例
這篇文章主要介紹了Java的MyBatis框架中一些重要的功能及基本使用示例整理,MyBatis可以幫助Java程序進行強大的數(shù)據庫操作,需要的朋友可以參考下2016-04-04
Java 實現(xiàn)攔截器Interceptor的攔截功能方式
這篇文章主要介紹了Java 實現(xiàn)攔截器Interceptor的攔截功能方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
解決mybatis-generator生成Mapper文件沒有Selective結尾的問題
這篇文章主要介紹了解決mybatis-generator生成Mapper文件沒有Selective結尾的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
如何使用JCTools實現(xiàn)Java并發(fā)程序
這篇文章主要介紹了如何使用JCTools實現(xiàn)Java并發(fā)程序,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下2021-03-03
jdk-logging?log4j?logback日志系統(tǒng)實現(xiàn)機制原理介紹
這篇文章主要介紹了jdk-logging、log4j、logback日志介紹以及三個日志系統(tǒng)的實現(xiàn)機制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03

