美文网首页
spring IOC功能实现

spring IOC功能实现

作者: wuqingfeng | 来源:发表于2022-08-21 19:46 被阅读0次

概述

refresh函数是spring容器启动的核心中的核心, Spring容器创建之后,会调用它的refresh方法刷新Spring应用的上下文。

代码概述

refresh函数内容以及相关注释如下:

public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            // Prepare this context for refreshing.
            /**
             * 前戏,做容器刷新前的准备工作
             * 1、设置容器的启动时间
             * 2、设置活跃状态为true
             * 3、设置关闭状态为false
             * 4、获取Environment对象,并加载当前系统的属性值到Environment对象中
             * 5、准备监听器和事件的集合对象,默认为空的集合
             */

            prepareRefresh();

            // Tell the subclass to refresh the internal bean factory.
            // 创建容器对象:DefaultListableBeanFactory
            // 加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

            // Prepare the bean factory for use in this context.
            // beanFactory的准备工作,对各种属性进行填充
            prepareBeanFactory(beanFactory);

            try {
                // Allows post-processing of the bean factory in context subclasses.
                // 子类覆盖方法做额外的处理,此处我们自己一般不做任何扩展工作,但是可以查看web中的代码,是有具体实现的
                postProcessBeanFactory(beanFactory);

                // Invoke factory processors registered as beans in the context.
                // 调用各种beanFactory处理器
                invokeBeanFactoryPostProcessors(beanFactory);

                // Register bean processors that intercept bean creation.
                // 注册bean处理器,这里只是注册功能,真正调用的是getBean方法
                registerBeanPostProcessors(beanFactory);

                // Initialize message source for this context.
                // 为上下文初始化message源,即不同语言的消息体,国际化处理,在springmvc的时候通过国际化的代码重点讲
                initMessageSource();

                // Initialize event multicaster for this context.
                // 初始化事件监听多路广播器
                initApplicationEventMulticaster();

                // Initialize other special beans in specific context subclasses.
                // 留给子类来初始化其他的bean
                onRefresh();

                // Check for listener beans and register them.
                // 在所有注册的bean中查找listener bean,注册到消息广播器中
                registerListeners();

                // Instantiate all remaining (non-lazy-init) singletons.
                // 初始化剩下的单实例(非懒加载的)
                finishBeanFactoryInitialization(beanFactory);

                // Last step: publish corresponding event.
                // 完成刷新过程,通知生命周期处理器lifecycleProcessor刷新过程,同时发出ContextRefreshEvent通知别人
                finishRefresh();
            }

            catch (BeansException ex) {
                if (logger.isWarnEnabled()) {
                    logger.warn("Exception encountered during context initialization - " +
                            "cancelling refresh attempt: " + ex);
                }

                // Destroy already created singletons to avoid dangling resources.
                // 为防止bean资源占用,在异常处理中,销毁已经在前面过程中生成的单件bean
                destroyBeans();

                // Reset 'active' flag.
                // 重置active标志
                cancelRefresh(ex);

                // Propagate exception to caller.
                throw ex;
            }

            finally {
                // Reset common introspection caches in Spring's core, since we
                // might not ever need metadata for singleton beans anymore...
                resetCommonCaches();
            }
        }
    }

总体流程

相关文章

  • spring源码分析(一)

    你怎么理解Spring IOC、AOP,体现在Spring FrameWork中 只实现IOC功能的花不用导入co...

  • spring ioc

    spring ioc是什么? spring ioc 有什么好处? spring ioc 是如何实现的?

  • 从零开始手写 spring ioc 框架,深入学习 spring

    IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理。 创作目的 使用 spri...

  • spring IOC功能实现

    概述 refresh函数是spring容器启动的核心中的核心, Spring容器创建之后,会调用它的refresh...

  • Java面试题:Spring IOC容器启动流程附源码

    1. IOC容器概述 IOC和AOP是Spring框架的核心功能,而IOC又是AOP实现的基础,因而可以说IOC是...

  • Spring IoC 原理分析

    Spring的IoC能力是我们在项目中经常用到的,这一块的相关原理很有必要搞清楚。Spring的IoC功能实现可分...

  • spring 那点事

    Spring核心功能 DI(IOC) 何谓DI(IOC) DI(依赖注入)是spring的核心功能之一。Depen...

  • Spring

    Spring 的模块 1 什么是IOC,什么是依赖注入,Spring IOC 如何实现ans: IOC — Inv...

  • 2018-06-08

    IOC 容器 IOC容器和beans Spring实现了IOC (Inversion of Control)(控制...

  • 一、Spring核心篇

    第2章Spring Framework的核心:IoC容器的实现 2.1Spring IoC容器概述 1.IOC容器...

网友评论

      本文标题:spring IOC功能实现

      本文链接:https://www.haomeiwen.com/subject/qpaigrtx.html