Spring Bean生命周期

2021-03-02  本文已影响0人  一只弹窗仔

beanFactory.getBean-AbstractBeanFactory.getBean-doGetBean-getSingleton(获取循环依赖)

public void refresh() throws BeansException, IllegalStateException {
        synchronized(this.startupShutdownMonitor) {
            this.prepareRefresh();
            ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
            this.prepareBeanFactory(beanFactory);

            try {
                this.postProcessBeanFactory(beanFactory);
                this.invokeBeanFactoryPostProcessors(beanFactory);
                this.registerBeanPostProcessors(beanFactory);
                this.initMessageSource();
                this.initApplicationEventMulticaster();
                this.onRefresh();
                this.registerListeners();
                this.finishBeanFactoryInitialization(beanFactory);
                this.finishRefresh();
            } catch (BeansException var9) {
                if (this.logger.isWarnEnabled()) {
                    this.logger.warn("Exception encountered during context initialization - cancelling refresh attempt: " + var9);
                }

                this.destroyBeans();
                this.cancelRefresh(var9);
                throw var9;
            } finally {
                this.resetCommonCaches();
            }

        }
    }

1、实例化spring容器
2、扫描springbean规则的class
3、遍历这个集合中的类---封装成为一个bd对象---put beanDefinitionMap中
4、遍历beanDefinitionMap ---获得bd对象
5、解析---validate
6、通过---bd---class---类对象
7、得到所有构造方法---通过算法推断出合理的构造方法
8、通过这个合理的构造方法反射实例化一个对象
9、合并bd
10 、提前暴露工厂---循环依赖
11、注入属性---判断是否需要完成属性填充,自动注入
12、执行部分的aware接口
13 、执行部分aware接口,lifecycle,callback
14、lifeCycle,callback
15 aop 事件

上一篇 下一篇

猜你喜欢

热点阅读