0
点赞
收藏
分享

微信扫一扫

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

仲秋花似锦 2022-04-13 阅读 57
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类的实例
举报

相关推荐

0 条评论