Spring Bean 的生命周期是指 Spring 容器从创建 Bean 实例到销毁 Bean 实例的整个过程。Spring 为 Bean 的生命周期提供了一系列的回调方法和接口,以便开发人员可以在 Bean 初始化前后执行特定的操作。了解 Spring Bean 的生命周期有助于我们更好地管理和配置 Spring 应用中的 Bean。
Bean 实例化 -> 依赖注入 -> 调用 Aware 接口 -> 前置处理 -> 初始化 -> 后置处理 -> Bean 就绪 -> Bean 销毁
以下是一个完整的 Spring Bean 生命周期的示例:
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;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class MyBean implements BeanNameAware, BeanFactoryAware, ApplicationContextAware,
InitializingBean, DisposableBean {
private String beanName;
private BeanFactory beanFactory;
private ApplicationContext applicationContext;
@Override
public void setBeanName(String name) {
this.beanName = name;
System.out.println("Bean Name Aware: " + name);
}
@Override
public void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
System.out.println("Bean Factory Aware");
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
System.out.println("ApplicationContext Aware");
}
@PostConstruct
public void postConstruct() {
System.out.println("PostConstruct Method");
}
@Override
public void afterPropertiesSet() {
System.out.println("InitializingBean: afterPropertiesSet");
}
public void customInit() {
System.out.println("Custom Init Method");
}
@PreDestroy
public void preDestroy() {
System.out.println("PreDestroy Method");
}
@Override
public void destroy() {
System.out.println("DisposableBean: destroy");
}
public void customDestroy() {
System.out.println("Custom Destroy Method");
}
}
配置 init-method 和 destroy-method:
XML 示例
<bean id="myBean" class="com.example.MyBean" init-method="customInit" destroy-method="customDestroy"/>
@Bean 注解示例
@Bean(initMethod = "customInit", destroyMethod = "customDestroy")
public MyBean myBean() {
return new MyBean();
}