Spring IOC容器的依赖注入流程

Spring IOC容器的依赖注入工作可以分为两个阶段

阶段一:收集和注册

第一个阶段可以认为是构建和收集bean定义的阶段,在这个阶段中,我们可以通过XML或者Java代码的方式定义一些bean,然后通过手动组装或者让容器基于某些机制自动扫描的形式,将这些bean定义收集到IoC容器中

假设我们以XML配置的形式来收集并注册单一bean,一般形式如下:

<bean id="mockService" class="..MockServiceImpl">​       ...</bean>

如果嫌逐个收集bean定义麻烦,想批量地收集并注册到IoC容器中,我们也可以通过XML Schema形式的配置进行批量扫描并采集和注册:

<context:component-scan base-package="com.keevol">

阶段二:分析和组装

当第一阶段工作完成后,我们可以先暂且认为IoC容器中充斥着一个个独立的bean,它们之间没有任何关系。但实际上,它们之间是有依赖关系的,所以,IoC容器在第二阶段要干的事情就是分析这些已经在IoC容器之中的bean,然后根据它们之间的依赖关系先后组装它们如果IoC容器发现某个bean依赖另一个bean,它就会将这另一个bean注入给依赖它的那个bean,直到所有bean的依赖都注入完成,所有bean都“整装待发”,整个IoC容器的工作即算完成

至于分析和组装的依据,Spring框架最早是通过XML配置文件的形式来描述bean与bean之间的关系的,随着Java业界研发技术和理念的转变,基于Java代码和Annotation元信息的描述方式也日渐兴盛(比如@Autowired和@Inject),但不管使用哪种方式,都只是为了简化绑定逻辑描述的各种“表象”,最终都是为本阶段的最终目的服务

Spring IOC容器的依赖注入流程(收集和注册、分析和组装)相关推荐

  1. spring源码分析第三天------spring核心IOC容器和依赖注入原理

    基于XML的依赖注入 1.依赖注入发生的时间 当 Spring IOC 容器完成了 Bean 定义资源的定位.载入和解析注册以后,IOC 容器中已经管理类 Bean 定义的相关数据,但是此时 IOC ...

  2. 依赖反转原理,IoC容器和依赖注入:第2部分

    目录 介绍 控制反转(IoC) 什么是控制反转 接口反转 流反转 创建反转 依赖注入 总结 介绍 这是有关依赖反转原理,IoC容器和依赖注入的文章的继续部分.在本文的上半部分,我解释了什么是依赖反转原 ...

  3. 依赖反转原理,IoC容器和依赖注入:第4部分

    目录 介绍 背景 LifeTimeOption的实现 总结 下载源代码18.5 KB 介绍 这是我有关依赖反转原理,IoC容器和依赖注入的文章的第四部分.在本文的上半部分,我试图解释如何构建自己的Io ...

  4. 依赖反转原理,IoC容器和依赖注入:第3部分

    目录 介绍 背景 自定义IoC容器的工作方式 自定义IoC容器 高级模块的使用者 编码自定义IoC容器 步骤1:在Visual Studio中创建一个空白解决方案,并创建以下项目 步骤2:将以下代码添 ...

  5. php 对ioc容器的理解,关于php:了解IoC容器和依赖注入

    快进: 我写这篇文章的目的是为了更好地理解依赖项注入和IOC容器,同时也为了以后能够纠正其中的错误,并用它来帮助我的一些朋友了解它们. 到目前为止,我已经尝试阅读各种框架的文档(Laravel.Fue ...

  6. Spring框架IOC容器,依赖注入,控制反转

    Spring的配制文件中 以上标签的属性id是不是必须的?不是必须的,如果定义id,那么其它的bean就可以通过此name来引用id 创建beans.xml <?xml version=&quo ...

  7. Spring IoC容器设计与实现——IoC容器的依赖注入

    Spring IoC容器设计与实现--IoC容器的初始化过程 依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,当然也有例外,就是可以通过控制lazy-init属性来让容器完成对Bean的预 ...

  8. spring ioc容器创建过程-整体流程

    文章目录 一.spring ioc 创建总览 二.BeanFactory和ApplicationContext 三.初始化DefaultListableBeanFactory 四.总结: 前面写了四篇 ...

  9. AspectCore中的IoC容器和依赖注入

    IOC模式和依赖注入是近年来非常流行的一种模式,相信大家都不陌生了,在Asp.Net Core中提供了依赖注入作为内置的基础设施,如果仍不熟悉依赖注入的读者,可以看看由我们翻译的Asp.Net Cor ...

最新文章

  1. Spring mvc中自定义拦截器
  2. 初识消息队列/RabbitMQ详解
  3. linux数组操作 增删改查,linuxea:go数组与数组增删改查(19)
  4. html5 css svg,6款基于SVG的HTML5CSS3应用和动画
  5. vrep中remoteAPI 编程中遇到的没有预留命令执行时间遇到的问题
  6. 集合拆成固定长度的小集合_《集合啦动物森友会》钓鱼怎么玩?钓鱼小技巧攻略分享...
  7. Web报表页面如何传递中文参数
  8. python爬虫十二种方法_Python爬虫的N种姿势
  9. python2添加pip,无法在python2.6中使用PIP更新/添加任何包
  10. C语言程序设计第三版微课版,C语言程序设计(第3版 微课版)
  11. 关于SN和PN的概念
  12. 凑数算法 c语言,算法题解 - 牛客编程巅峰赛S1第4场 - 黄金钻石组
  13. 基于Syntiant TinyML Board与Edge Impulse的LED语音控制(Arduino/C++)
  14. 这几个方法让你学会PDF尺寸大小怎么调整
  15. 完全替代ALTERA EP4CE10, 国产AGM FPGA 的AG10K系列与之pin to pin 兼容
  16. 简书python数据分析基础reading_Python数据分析基础ReadingDay5_sqlite3
  17. LabVIEW NI CompactRIO控制器:性能和吞吐量基准测试
  18. 卷积神经网络之多元分类(剪刀石头布)
  19. LayaAir入坑指南一
  20. css会对网站排名有影响吗,网站是如何推广的?DIVCSS网页相似太多影响排名?

热门文章

  1. Spring-web-MultipartFile上传文件
  2. 华为音量键只能调通话_手机音量键还在以为只能调音量?别傻了,赶紧看看下文绝对涨知识!...
  3. c# post 读取返回html_PHP GET与POST
  4. (转)非常完善的Log4net详细说明
  5. Linux知识积累(2)dirname的使用方法
  6. ASP.NET TreeView控件各个节点总是居中对齐,而不是左对齐的问题
  7. 强类型数据集DataSet入门1
  8. 等响度曲线_等响曲线是如何绘制的?响度级
  9. r语言调用python_python如何调用R
  10. .net解析传过来的xml_隧桥管廊BIM+GIS运维管理系统方案解析