SpringIoC容器初始化主流程

Spring IoC 容器初始化的关键环节就在 AbstractApplicationContext#refresh() ⽅法中,我们查看 refresh ⽅法来俯瞰容器创建的主体流程,主体流程下的具体⼦流程我们后⾯再来讨论。

    @Override
    public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            // 第⼀步:刷新前的预处理
            prepareRefresh();
            /**
             第⼆步:
             获取BeanFactory;默认实现是DefaultListableBeanFactory
             加载BeanDefition 并注册到 BeanDefitionRegistry
             */
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
            // 第三步:BeanFactory的预准备⼯作(BeanFactory进⾏⼀些设置,⽐如context的类加载器等)
            prepareBeanFactory(beanFactory);
            try {
                // 第四步:BeanFactory准备⼯作完成后进⾏的后置处理⼯作
                postProcessBeanFactory(beanFactory);
                // 第五步:实例化并调⽤实现了BeanFactoryPostProcessor接⼝的Bean
                invokeBeanFactoryPostProcessors(beanFactory);
                // 第六步:注册BeanPostProcessor(Bean的后置处理器),在创建bean的前后等执⾏
                registerBeanPostProcessors(beanFactory);
                // 第七步:初始化MessageSource组件(做国际化功能;消息绑定,消息解析);
                initMessageSource();
                // 第⼋步:初始化事件派发器
                initApplicationEventMulticaster();
                // 第九步:⼦类重写这个⽅法,在容器刷新的时候可以⾃定义逻辑
                onRefresh();
                // 第⼗步:注册应⽤的监听器。就是注册实现了ApplicationListener接⼝的监听器
                bean
                registerListeners();
                /**
                 第⼗⼀步:
                 初始化所有剩下的⾮懒加载的单例bean
                 初始化创建⾮懒加载⽅式的单例Bean实例(未设置属性)
                 填充属性
                 初始化⽅法调⽤(⽐如调⽤afterPropertiesSet⽅法、init-method⽅法)
                 调⽤BeanPostProcessor(后置处理器)对实例bean进⾏后置处
                 */
                finishBeanFactoryInitialization(beanFactory);
                /**
                 第⼗⼆步:
                 完成context的刷新。主要是调⽤LifecycleProcessor的onRefresh()⽅法,并且发布事
                 件 (ContextRefreshedEvent)
                 */
                finishRefresh();
            }
            ......
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值