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();
    }
}

在这里插入图片描述