Spring IOC容器的依赖注入流程(收集和注册、分析和组装)
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容器的依赖注入流程(收集和注册、分析和组装)相关推荐
- spring源码分析第三天------spring核心IOC容器和依赖注入原理
基于XML的依赖注入 1.依赖注入发生的时间 当 Spring IOC 容器完成了 Bean 定义资源的定位.载入和解析注册以后,IOC 容器中已经管理类 Bean 定义的相关数据,但是此时 IOC ...
- 依赖反转原理,IoC容器和依赖注入:第2部分
目录 介绍 控制反转(IoC) 什么是控制反转 接口反转 流反转 创建反转 依赖注入 总结 介绍 这是有关依赖反转原理,IoC容器和依赖注入的文章的继续部分.在本文的上半部分,我解释了什么是依赖反转原 ...
- 依赖反转原理,IoC容器和依赖注入:第4部分
目录 介绍 背景 LifeTimeOption的实现 总结 下载源代码18.5 KB 介绍 这是我有关依赖反转原理,IoC容器和依赖注入的文章的第四部分.在本文的上半部分,我试图解释如何构建自己的Io ...
- 依赖反转原理,IoC容器和依赖注入:第3部分
目录 介绍 背景 自定义IoC容器的工作方式 自定义IoC容器 高级模块的使用者 编码自定义IoC容器 步骤1:在Visual Studio中创建一个空白解决方案,并创建以下项目 步骤2:将以下代码添 ...
- php 对ioc容器的理解,关于php:了解IoC容器和依赖注入
快进: 我写这篇文章的目的是为了更好地理解依赖项注入和IOC容器,同时也为了以后能够纠正其中的错误,并用它来帮助我的一些朋友了解它们. 到目前为止,我已经尝试阅读各种框架的文档(Laravel.Fue ...
- Spring框架IOC容器,依赖注入,控制反转
Spring的配制文件中 以上标签的属性id是不是必须的?不是必须的,如果定义id,那么其它的bean就可以通过此name来引用id 创建beans.xml <?xml version=&quo ...
- Spring IoC容器设计与实现——IoC容器的依赖注入
Spring IoC容器设计与实现--IoC容器的初始化过程 依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,当然也有例外,就是可以通过控制lazy-init属性来让容器完成对Bean的预 ...
- spring ioc容器创建过程-整体流程
文章目录 一.spring ioc 创建总览 二.BeanFactory和ApplicationContext 三.初始化DefaultListableBeanFactory 四.总结: 前面写了四篇 ...
- AspectCore中的IoC容器和依赖注入
IOC模式和依赖注入是近年来非常流行的一种模式,相信大家都不陌生了,在Asp.Net Core中提供了依赖注入作为内置的基础设施,如果仍不熟悉依赖注入的读者,可以看看由我们翻译的Asp.Net Cor ...
最新文章
- Spring mvc中自定义拦截器
- 初识消息队列/RabbitMQ详解
- linux数组操作 增删改查,linuxea:go数组与数组增删改查(19)
- html5 css svg,6款基于SVG的HTML5CSS3应用和动画
- vrep中remoteAPI 编程中遇到的没有预留命令执行时间遇到的问题
- 集合拆成固定长度的小集合_《集合啦动物森友会》钓鱼怎么玩?钓鱼小技巧攻略分享...
- Web报表页面如何传递中文参数
- python爬虫十二种方法_Python爬虫的N种姿势
- python2添加pip,无法在python2.6中使用PIP更新/添加任何包
- C语言程序设计第三版微课版,C语言程序设计(第3版 微课版)
- 关于SN和PN的概念
- 凑数算法 c语言,算法题解 - 牛客编程巅峰赛S1第4场 - 黄金钻石组
- 基于Syntiant TinyML Board与Edge Impulse的LED语音控制(Arduino/C++)
- 这几个方法让你学会PDF尺寸大小怎么调整
- 完全替代ALTERA EP4CE10, 国产AGM FPGA 的AG10K系列与之pin to pin 兼容
- 简书python数据分析基础reading_Python数据分析基础ReadingDay5_sqlite3
- LabVIEW NI CompactRIO控制器:性能和吞吐量基准测试
- 卷积神经网络之多元分类(剪刀石头布)
- LayaAir入坑指南一
- css会对网站排名有影响吗,网站是如何推广的?DIVCSS网页相似太多影响排名?
热门文章
- Spring-web-MultipartFile上传文件
- 华为音量键只能调通话_手机音量键还在以为只能调音量?别傻了,赶紧看看下文绝对涨知识!...
- c# post 读取返回html_PHP GET与POST
- (转)非常完善的Log4net详细说明
- Linux知识积累(2)dirname的使用方法
- ASP.NET TreeView控件各个节点总是居中对齐,而不是左对齐的问题
- 强类型数据集DataSet入门1
- 等响度曲线_等响曲线是如何绘制的?响度级
- r语言调用python_python如何调用R
- .net解析传过来的xml_隧桥管廊BIM+GIS运维管理系统方案解析