Spring中bean生命周期过程是如何通过代码实现的?
摘要:今天我们编写一个简单的demo来分析一下spring中整个bean的生命周期 编写Demo 1. 首先我们定义一个BeanFactoryProcessor的类,目的是为了看出PostProcessBeanFactory接口被调用的时间点 p
今天我们编写一个简单的demo来分析一下spring中整个bean的生命周期
编写Demo
1. 首先我们定义一个BeanFactoryProcessor的类,目的是为了看出PostProcessBeanFactory接口被调用的时间点
package cn.sue.spring.test.lifecycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;
/**
* <p>
*
* </p>
*
* @author Sue
* @className MyBeanFactoryPostProcessor
* @create 2023/4/25
**/
@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
public MyBeanFactoryPostProcessor() {
super();
System.out.println("【BeanFactoryPostProcessor】实现类的构造函数");
}
// 允许我们在工厂里所有的bean被加载进来后但是还没初始化前,对所有bean的属性进行修改也可以add属性值,该操作在对应bean的构造函数执行前
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {
System.out.println("BeanFactoryPostProcessor.postProcessBeanFactory(),来自MyBeanFactoryPostProcessor");
//获取到Spring中所有的beanName
String[] beanStr = arg0.getBeanDefinitionNames();
//循环打印
for (String beanName : beanStr) {
System.out.print("已加载的bean name:" + beanName + ";" + "\n");
}
System.out.println();
}
}
2. 接着再写一个实现了BeanPostProcessor的类,目的是为了看出bean初始化前后的时间点
package cn.sue.spring.test.lifecycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
/**
* <p>
*
* </p>
*
* @author Sue
* @className MyBeanPostProcessor
* @create 2023/4/25
**/
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
public MyBeanPostProcessor() {
super();
System.out.println("BeanPostProcessor{}实现类的构造函数");
}
// 实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的业务
@Override
public Object postProcessAfterInitialization(Object
