SpringBean的加载机制
(95条消息) 一文读懂 Spring Bean 的生命周期_老周聊架构的博客-CSDN博客_springbean的生命周期
之前用Bean直接无脑加注解,也没有特别关系bean创建前后,以及bean和spring容器间的一些关系,现在看面筋有问到这方面,速来恶补一番。
原先的一套说辞是:springioc容器先进行一波扫描,扫描bean的注解和xml配置,然后把扫描出来的bean封装成beandefinition这个数据结构,放到beandefinitionmap里面去。
但是,显然这不够详细因为还有很多细节没有讲到,比如实例化的时候前后的方法,属性赋值的时候Aware接口相关属性的赋值,还有初始化前后的方法,以及最后的销毁。
所以稍微详细一点的版本是:springioc容器先进行一波扫描,扫描bean的注解和xml配置,然后把扫描出来的bean封装成beandefinition这个数据结构, 然后对其进行实例化(前后会由InstantiationAwareBeanPostProcessor处理,执行一些操作),属性注入赋值(就是bean自带的一些成员变量进行赋值,如果实现了Aware接口,还得将相关信息通过重写的方法注入bean),初始化(自己配置的init-method方法),然后就放在在beandefinitionmap中,销毁(自己配置的destory方法)。
关于那个init-method和destorymethod,我的理解就是下面这样的。
TestBean.class
@Slf4j
public class TestBean {
public void init() {
log.info("初始化TestBean");
// DO STH.
}
public void destroy() {
log.info("销毁TestBean");
// DO STH.
}
}
CommonConfig.class
@Slf4j
@Configuration
public class CommonConfig {
@Bean(initMethod = "init", destroyMethod = "destroy")
public TestBean testBean() {
return new TestBean();
}
}