Spring Bean 的生命周期记录
spring bean 的生命周期记录
- 实例化:为 Bean 分配内存空间;
- 设置属性:将当前类依赖的 Bean 属性,进行注入和装配;
- 初始化:
- 执行各种通知;
- 执行初始化的前置方法;
- 执行初始化方法;
- 执行初始化的后置方法。
- 使用 Bean:在程序中使用 Bean 对象;
- 销毁 Bean:将 Bean 对象进行销毁操作。
一个是每个类的自己控制器
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class BeanLifeComponent implements BeanNameAware {
public void setBeanName(String s) {
System.out.println("执行 BeanName 的通知方法");
}
@PostConstruct
public void postConstruct() {
System.out.println("执行初始化方法");
}
public void use() {
System.out.println("使用 Bean");
}
@PreDestroy
public void preDestroy() {
System.out.println("执行销毁方法");
}
}
一个是通用的控制器
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (beanName.equals("beanLifeComponent")) {
System.out.println("执行初始化前置方法");
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (beanName.equals("beanLifeComponent")) {
System.out.println("执行初始化后置方法");
}
return bean;
}
}
当使用spring boot启动后
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
// 得到上下文对象,并启动 Spring Boot 项目
ConfigurableApplicationContext context =
SpringApplication.run(DemoApplication.class, args);
// 获取 Bean
BeanLifeComponent component = context.getBean(BeanLifeComponent.class);
// 使用 Bean
component.use();
// 停止 Spring Boot 项目
context.close();
}
}
执行结果

总结一下
切入bean的生命周期有几个方式
实现BeanNameAware 可以指定类名称
使用@PostConstruct 可以执行初始化方式
使用@PreDestroy可以执行销毁方式
实现BeanPostProcessor可以全局的切入bean的生命周期,会在初始化前后执行
License:
CC BY 4.0