Spring源码深度解析读书日记六

容器的扩展功能

设置路径

在这里插入图片描述

扩展功能

public void refresh() throws BeansException, IllegalStateException {
        synchronized(this.startupShutdownMonitor) {
        //准备刷新的上下文环境
            this.prepareRefresh();
            //初始化BeanFactory,并进行XML文件读取
            ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();
            // 进行各种功能填充
            this.prepareBeanFactory(beanFactory);

            try {
            //子类覆盖方法做额外处理
                this.postProcessBeanFactory(beanFactory);
                //激活各种BeanFactory处理器
                this.invokeBeanFactoryPostProcessors(beanFactory);
                //注册拦截Bean创建的Bean处理器,这里只是注册,真正调用是在getBean时候
                this.registerBeanPostProcessors(beanFactory);
                //为上下文初始化Message源,即不同语言的消息体,国际化处理
                this.initMessageSource();
                // 初始化应用消息广播器,并放入applicationEventMulticasterBean中
                this.initApplicationEventMulticaster();
                // 留给子类来初始化其他的Bean
                this.onRefresh();
                // 在所有注册的Bean中查找ListenerBean,注册到广播器中
                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. 准备刷新的上下文环境
  2. 初始化BeanFactory,并进行XML文件读取
  3. 进行各种功能填充
  4. 子类覆盖方法做额外处理
  5. 激活各种BeanFactory处理器
  6. 注册拦截Bean创建的Bean处理器,这里只是注册,真正调用是在getBean时候
  7. 为上下文初始化Message源,即不同语言的消息体,国际化处理
  8. 初始化应用消息广播器,并放入applicationEventMulticasterBean中
  9. 留给子类来初始化其他的Bean
  10. 在所有注册的Bean中查找ListenerBean,注册到广播器中
  11. 初始化剩下的单实例
  12. 完成刷新过程,通知生命周期处理器

加载BeanFactory

  1. 创建DefaultListableBeanFactory
  2. 指定序列化ID
  3. 定制BeanFactory
  4. 加载BeanDefinition
  5. 使用全局变量记录BeanFactory类的实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值