总结一下IOC 容器初始化的基本步骤:

1、初始化的入口在容器实现中的refresh()调用来完成。

2、对Bean 定义载入IOC 容器使用的方法是loadBeanDefinition(),其中的大致过程如下:通过ResourceLoader 来完成资源文件位置的定位,DefaultResourceLoader是默认的实现,同时上下文本身就给出了ResourceLoader 的实现,可以从类路径,文件系统,URL 等方式来定为资源位置。如果是XmlBeanFactory 作为IOC 容器,那么需要为它指定Bean 定义的资源,也就是说Bean 定义文件时通过抽象成Resource 来被IOC 容器处理的, 容器通过BeanDefinitionReader 来完成定义信息的解析和Bean 信息的注册, 往往使用的是XmlBeanDefinitionReader 来解析Bean 的XML 定义文件- 实际的处理过程是委托给BeanDefinitionParserDelegate 来完成的,从而得到bean 的定义信息,这些信息在Spring 中使用BeanDefinition 对象来表示-这个名字可以让我们想到loadBeanDefinition(),registerBeanDefinition()这些相关方法。它们都是为处理BeanDefinitin 服务的,容器解析得到BeanDefinition 以后,需要把它在IOC 容器中注册,这由IOC 实现BeanDefinitionRegistry 接口来实现。注册过程就是在IOC 容器内部维护的一个HashMap 来保存得到的BeanDefinition 的过程。这个HashMap 是IOC 容器持有Bean 信息的场所,以后对Bean 的操作都是围绕这个HashMap 来实现的。

然后我们就可以通过BeanFactory 和ApplicationContext 来享受到Spring IOC 的服务了,在使用IOC容器的时候,我们注意到除了少量粘合代码,绝大多数以正确IOC 风格编写的应用程序代码完全不用关心如何到达工厂,因为容器将把这些对象与容器管理的其他对象钩在一起。基本的策略是把工厂放到已知的地方,最好是放在对预期使用的上下文有意义的地方,以及代码将实际需要访问工厂的地方。Spring本身提供了对声明式载入web 应用程序用法的应用程序上下文,并将其存储在ServletContext 中的框架实现。

IOC 容器初始化小结相关推荐

  1. Spring IoC容器初始化源码(1)—容器初始化入口以及setConfigLocations设置容器配置信息【一万字】

      基于最新Spring 5.x,对于基于XML的Spring IoC容器初始化过程中的setConfigLocations设置容器配置信息方法的源码进行了详细分析,最后给出了比较详细的方法调用时序图 ...

  2. spring源码 — 一、IoC容器初始化

    IoC容器初始化 注意:本次的spring源码是基于3.1.1.release版本 容器:具有获取Bean功能--这是最基本功能,也是BeanFactory接口定义的主要行为,在添加了对于资源的支持之 ...

  3. 【spring源码分析】IOC容器初始化(二)

    前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...

  4. Spring IOC学习心得之源码级分析ContextLoaderListener的作用(IOC容器初始化入口)

    ContextLoaderListener类是负责初始化IOC容器,即在我们的web项目中,这里就是IOC容器初始化的入口,由这个类启动IOC容器的初始化. 它配置在web.xml中,比如如下配置: ...

  5. 一步一步手绘Spring IOC运行时序图三(基于Annotation的IOC容器初始化)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  6. 一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  7. 【Spring】IOC:基于注解的IOC容器初始化源码分析

    从 Spring2.0 以后的版本中,Spring 也引入了基于注解(Annotation)方式的配置,注解(Annotation)是 JDK1.5 中引入的一个新特性,用于简化 Bean 的配置,可 ...

  8. 【spring源码分析】IOC容器初始化(六)

    前言:经过前几篇文章的讲解,我们已经得到了BeanDefinition,接下来将分析Bean的加载. 获取Bean的入口:AbstractApplicationContext#getBean 1 pu ...

  9. Spring(二)IOC容器的初始化流程

    文章目录 一.Spring 核心容器类 1.1 BeanFactory 1.2 ApplicationContext 1.3 BeanDefinition 二.IOC容器的初始化 2.1 基于Xml的 ...

最新文章

  1. 版本扫盲及最新android studio下载
  2. STM32 基础系列教程 46 – RNG
  3. 【STM32】FreeRTOS列表和列表项详解
  4. python schedule多线程_Python定时任务sched模块用法示例
  5. 探秘大型B2C网站如何实现高性能可伸缩架构技术
  6. 笔试小结---非对称加密算法
  7. openSUSE 13.1 Milestone 2 发布
  8. 使用VS Code开发asp.net core (上)
  9. 物联网带来的安全梦魇
  10. 高性能javascript读书笔记(三.DOM 编程2)
  11. 打开json文件的工具_Flutter中JSON转Model——在线生成
  12. Atitit 数据库重复数据产生原因与解决总结 目录 1. 原因 1 1.1. 缺少数据约束校验 1 1.2. 表关系关联设计错误 1 2. 约束种类 1 2.1. 分类 表级约束vs列级别约束 2
  13. QT+ 状态栏+核心控件+浮动窗口
  14. java int 转换成byte_Java如何将int转换为byte?
  15. ecs服务器数据迁移_如何用迁云工具把服务器数据迁移到阿里云服务器ecs?
  16. Linux界面和字体大小调整
  17. 南卫理公会大学 计算机排名,南卫理公会大学全球排名及其优秀校友
  18. datastage 如何把db2的varchar列数据抽取到mysql的longtext列
  19. DRAM知识整理系列(一):SDRAM的简介与SDRAM的管脚与尺寸介绍
  20. 品牌对比|斯凯奇 VS 李宁

热门文章

  1. scrapy-redis 分布式哔哩哔哩网站用户爬虫
  2. jQuery使用(十五):when()方法的使用
  3. 【笔记】css 自定义select 元素的箭头样式
  4. servlet web.xml学习笔记
  5. myeclipse 重新关联项目和svn
  6. 如何理解并学习javascript中的面向对象(OOP)
  7. 2018年中国研究生数学建模竞赛--经验贴
  8. 云端的SRE发展与实践
  9. Windows消息机制详解
  10. GitLab安装配置使用总结