IOC 是如何工作的?
通过 ApplicationContext 创建 Spring 容器,容器读取配置文件 “/beans.xml” 并管理定义的 Bean 实例对象。
 
通过 ApplicationContext.getBean 获取 Bean 实例。
 
IOC 容器经历的几个阶段:Resource 定位、载入 BeanDefinition、将 BeanDefinition 注册到容器。
 
Resource 定位
 
Resource 是 Spring 中用于封装 I/O 操作的接口。主要有:
 
FileSystemResource:以文件绝对路径进行资源访问
 
ClassPathResource:以类路径的方式访问资源
 
ServletContextResource:web 应用根目录的方式访问资源
 
UrlResource:访问网络资源的实现类
 
ByteArrayResource:访问字节数组资源的实现类
 
 
 
Spring 提供了 ResourceLoader 接口用于实现不同的 Resource 加载策略,该接口的实例对象可以获取一个 Resource 对象。
 
在 ResourceLoader 接口中定义了两个方法:
Resource getResource(String location); // 通过提供的资源 location 参数获取 Resource 实例
ClassLoader getClassLoader(); // 获取 ClassLoader, 通过 ClassLoader 可将资源载入 JVM
 
ApplicationContext 的所有实现类都实现了 ResourceLoader 接口,所以可以直接调用 getResource 获取 Resource 对象。
 
获取到 Resource 后就完成了资源定位,接下来就可以用 I/O 载入 Bean.
 
载入 BeanDefinition
BeanDefinition 是一个数据结构(interface),描述了一个 bean 实例,它具有属性值、构造函数参数值以及由具体实现提供的更多信息。
 
Bean 会在 Spring IOC 容器内以 BeanDefinition 的形式存在,IOC 容器对 Bean 的管理和依赖注入都是通过操作 BeanDefinition 来完成的。
 
Resource 定位后,由 ApplicationContext 的实现类读取 Resource,并加载为 BeanDefinition。
 
我们通常使用 @Configuration 配置类来定义 Bean,这类 Bean 就是通过 AnnotationConfigApplicationContext 获取的。
 
 
obtainFreshBeanFactory()
在之前的文章中说到,Spring 上下文初始化最重要的方法 refresh(),其中有4个方法,
 
而 obtainFreshBeanFactory() 就是用于解析 Spring 配置文件,
 
将所有 Spring 配置文件中的 Bean 定义封装成 BeanDefinition,加载到 BeanFactory 中。
 
以下是 IOC 容器初始化流程图

Spring Ioc 容器初始化过程的更多相关文章

  1. Spring IoC容器初始化过程学习

    IoC容器是什么?IoC文英全称Inversion of Control,即控制反转,我么可以这么理解IoC容器: 把某些业务对象的的控制权交给一个平台或者框架来同一管理,这个同一管理的平台可以称为I ...

  2. 整理在Spring IOC容器初始化后可以处理特定逻辑的多种实现方式

    Spring框架的核心是依赖注入.切面:Spring Boot是在Spring框架的基础上为其提供许多默认配置.默认约定(约定优于配置),从而达到减少或减化配置进而可开箱即用.快速上手:Spring ...

  3. spring源码学习之路---深度分析IOC容器初始化过程(四)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近由于工作和生活,学习耽搁 ...

  4. Spring源码解析二:IOC容器初始化过程详解

    IOC容器初始化分为三个步骤,分别是: 1.Resource定位,即BeanDefinition的资源定位. 2.BeanDefinition的载入 3.向IOC容器注册BeanDefinition ...

  5. Spring源码分析:Spring IOC容器初始化

    概述: Spring 对于Java 开发来说,以及算得上非常基础并且核心的框架了,在有一定开发经验后,阅读源码能更好的提高我们的编码能力并且让我们对其更加理解.俗话说知己知彼,百战不殆.当你对Spri ...

  6. 03.Spring IoC 容器 - 初始化

    基本概念 Spring IoC 容器的初始化过程在监听器 ContextLoaderListener 类中定义. 具体由该类的的 configureAndRefreshWebApplicationCo ...

  7. Spring之IOC容器初始化过程

    Ioc容器的初始化是由refresh()方法来启动的,这个方法标志着Ioc容器的正式启动. 具体来说这个启动过程包括三个基本过程: 1.BeanDifinition的Resource定位 2.Bean ...

  8. Spring Boot IoC 容器初始化过程

    1. 加载 ApplicationContextInializer & ApplicationListener 2. 初始化环境 ConfigurableEnvironment & 加 ...

  9. IOC容器初始化过程

    原文链接请参见:http://blog.csdn.net/u010723709/article/details/47046211

随机推荐

  1. CF19E-Fairy【树形结构,差分】

    正题 题目链接:https://www.luogu.com.cn/problem/CF19E 题目大意 给出\(n\)个点\(m\)条边的一张无向图,求有多少条边去掉后可以使得图变成一张二分图. \( ...

  2. 博客调网易云歌单JS

    <!--音乐--> <link rel="stylesheet" href="https://blog-static.cnblogs.com/files ...

  3. 吴恩达-神经网络-week1-hw3

    Ref:https://blog.csdn.net/u013733326/article/details/79702148 点击查看代码 from testCases import * from pl ...

  4. 简易集成websocket技术实现消息推送

    Websocket 简介 首先介绍下WebSocket,它是一种网络通信技术,该技术最大的特点就是,服务器端可以主动往客户端发送消息:当然,客户端也可以主动往服务器发送消息,实现两端的消息通信,属于网 ...

  5. Java编程思想 第九章 接口

    第九章 接口 抽象类和抽象方法 抽象:从具体事物抽出.概括出它们共同的方面.本质属性与关系等,而将个别的.非本质的方面.属性与关系舍弃,这种思维过程,称为抽象. 这句话概括了抽象的概念,而在Java中 ...

  6. 怎样将.h文件添加到项目中

    作为C++的初学者,在运行别人的程序时,第一个遇到的问题就是无法将程序中写到的.h文件包含到项目中来.下面来写一下处理方法.本文以easyx.h为例进行说明 首先右键你的工程 选择Properties ...

  7. 【UE4】 补丁Patch 与 DLC

    概述 UE4 中主要使用 Project Launcher 来进行补丁和DLC的制作 补丁与 DLC 都需要基于某个版本而制作 补丁 与 DLC 最后以 Pak 形式表现, 补丁的 pak 可以重命名 ...

  8. win 常用修复蓝屏,系统比对最后更新20210804

    您可以尝试以下方案: 在管理员命令提示符下键入以下命令:Dism /Online /Cleanup-Image /ScanHealth这条命令将扫描全部系统文件并和官方系统文件对比,扫描计算机中的不一 ...

  9. Beta_Scrum Meeting_2

    会议概要 日期:2021年5月30日 出席人员:除zwh以外的所有人员 会议概述:讨论前两天工作进度以及后两天工作计划 人员分工 组员 负责 前两日完成的工作 后两日即将完成的工作 遇到的困难 hcc ...

  10. [软工顶级理解组] Beta阶段项目展示

    目录 团队成员 软件介绍 项目简介 预期典型用户 功能描述 预期目标用户数 用户反馈 团队管理 分工协作 项目管理 取舍平衡 代码管理 程序测试 代码规范 文档撰写 继续开发指导性 用户沟通 需求分析 ...