Spring Boot中的Bean生命周期包括以下阶段:
- 实例化:当Spring容器启动时,会根据配置文件或注解等方式创建Bean的实例。
- 属性赋值:在实例化后,Spring会自动为Bean的属性进行注入,包括配置文件中定义的属性和通过注解方式定义的属性。
- 自定义初始化方法:如果Bean需要在初始化时执行一些特定的操作,可以通过实现InitializingBean接口或使用@PostConstruct注解定义一个初始化方法。
- Aware回调接口:如果Bean需要访问Spring容器中的其他Bean,可以实现相应的Aware回调接口,例如ApplicationContextAware、BeanFactoryAware等。
- BeanPostProcessor前置处理器:如果需要对所有Bean进行一些通用的处理操作,可以实现BeanPostProcessor接口,并重写postProcessBeforeInitialization方法。
- 自定义初始化方法:执行自定义的初始化方法。
- BeanPostProcessor后置处理器:如果需要对所有Bean进行一些通用的处理操作,可以实现BeanPostProcessor接口,并重写postProcessAfterInitialization方法。
- 使用:一旦Bean经过初始化后,就可以被应用程序使用。
- 自定义销毁方法:如果Bean需要在销毁时执行一些特定的操作,可以通过实现DisposableBean接口或使用@PreDestroy注解定义一个销毁方法。
- 销毁:当Spring容器关闭时,会销毁所有Bean实例,并调用销毁方法。
以下是一个示例代码,展示了Spring Boot中Bean生命周期的各个阶段:
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ApplicationContextLoader;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.logging.Logger;
@Configuration
public class MyConfiguration {
@Bean
@Order(1) //前置处理器顺序
public MyBeanPostProcessor myBeanPostProcessor() {
return new MyBeanPostProcessor();
}
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@Component
public class MyBean {
private static final Logger logger = Logger.getLogger(MyBean.class.getName());
@PostConstruct //自定义初始化方法,该类不需要实现InitializingBean接口,@PostConstruct注解定义初始化方法即可。
public void init() {
logger.info("Initializing bean...");
}
@PreDestroy //自定义销毁方法,该类不需要实现DisposableBean接口,@PreDestroy注解定义销毁方法即可。
public void destroy() {
logger.info("Destroying bean...");
}
}