Loading

Bean的生命周期

简单来说,bean的生命周期为:创建→注入→初始化→返回→销毁

一、代码过程参考

//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean()
protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException {
        // .............
        if (instanceWrapper == null) {
            // 创建bean
            instanceWrapper = this.createBeanInstance(beanName, mbd, args);
        }
		// .............
        try {
            // 注入bean
            this.populateBean(beanName, mbd, instanceWrapper);
            // 初始化bean
            exposedObject = this.initializeBean(beanName, exposedObject, mbd);
        } catch (Throwable var18) {
           // ............
        }
		// 返回bean
}

二、详细过程

1.创建bean

​ 构造bean,相当于是new一个对象的过程

2.注入bean

​ 通过name或者type进行注入,检查并满足依赖,设置属性值

3.初始化bean

  1. 注入aware接口

    检查是否实现了aware接口,然后分别进行对象名的设置,类加载器的设置,beanFactory的实例引用

  2. 后处理器的前置处理

    可以重写postProcessBeforeInitialization,在bean初始化之前进行一些处理

  3. 调用初始化方法

    对实现了InitializingBean接口的bean执行afterPropertiesSet方法,在属性设置完成之后的处理

  4. 后处理器的后置处理

    重写postProcessAfterInitialization,对已经初始化的bean做后续的处理

4.设置bean的管理

​ 如果bean的作用域为singleton,则交付bean给spring的IOC容器进行管理,如果是prototype,则让调用者去管理bean的生命周期

5.返回bean

三、图示

posted @ 2022-05-08 16:36  醉千灯  阅读(60)  评论(0编辑  收藏  举报