Spring框架系列(四)--IOC控制反转和DI依赖注入
背景:
如果对象的引用或者依赖关系的管理由具体对象完成,代码的耦合性就会很高,代码测试也变得困难。而IOC可以很好的解决这个问题,把这
些依赖关系交给框架或者IOC容器进行管理,简化了开发。
IOC是一种设计模式,而Spring IOC是其一种实现。Spring IOC提供一个基本的JavaBean容器,通过IOC模式管理依赖关系。
IOC(Inversion of Control)两种实现:

1、DL(Dependency Lookup),已经被淘汰,需要用户自己去查找资源和组装对象,有了侵入性
2、DI(Dependency Injection),负责组建的装配
Spring的IOC支持的功能:
1、依赖注入
2、依赖检查
3、自动装配
4、支持集合
5、指定初始化方法和销毁方法
6、支持回调某些方法(需要实现Spring接口,略有侵入性)
最重要是依赖注入,从XML读取ref标签,ref就是runtimeBeanReference
IOC容器主要分为两种具体表现形式:
1、BeanFactory接口:简单容器。只是实现了最基本的功能,可以理解为hashmap,key是BeanName,value是bean instance
2、ApplicationContext接口:高级容器。在简单容器的基础上,集成很多接口,代表整个容器的所有功能。定义了refresh(),刷新整个容
器,重新加载/刷新所有的bean
除了这两种,还有其他的辅助接口

ApplicationContext作为高级容器依赖低级容器的getBean(),ClassPathXmlApplicationContext的构建过程是IOC的初始化
流程:
1、用户构造ClassPathXmlApplicationContext(简称 CPAC)
CPAC首先访问了“抽象高级容器”的refresh(),这个方法是模板方法。所以要回调子类(低级容器)的refreshBeanFactory(),作用是使用
低级容器加载所有BeanDefinition和Properties到容器中。
低级容器加载成功后,高级容器开始处理一些回调,例如Bean后置处理器。回调setBeanFactory法。或者注册监听器等,发布事件,实例化例
Bean等等功能。
简单说就是:
1、低级容器加载配置文件(从 XML,数据库,Applet),并解析成 BeanDefinition 到低级容器中。
2、加载成功后,高级容器启动高级功能,例如接口回调,监听器,自动实例化单例,发布事件等等功能。
加载所有的Bean配置成BeanDefinition到容器中,如果Bean有依赖关系,则使用占位符暂时代替。
然后,在调用getBean的时候,进行真正的依赖注入,即如果碰到了属性是ref的(占位符),那么就从容器里获取这个Bean,然后注入到实例中
—— 这就是依赖注入。
依赖注入方式:
setter、constructor、factory实现
请自行百度或者参考我之前的文章:https://www.cnblogs.com/huigelaile/p/10973913.html
想要深入了解可以查看《Spring技术内幕》一书第二章,或者IOC相关源码
Spring框架系列(四)--IOC控制反转和DI依赖注入的更多相关文章
- spring(一) IOC 控制反转 、DI 依赖注入
IOC 控制反转:创建对象的方式 变成了由Spring来主导 IOC底层原理:对象工厂 1.导入jar包:4个核心jar和1个依赖jar spring-beans-4.3.9.RELEASE.jar ...
- Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)
Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧) 1.IoC是什么? IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多 ...
- [转帖]什么是IOC(控制反转)、DI(依赖注入)
什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642 原文地址(摘要了部分内容):https://blog.csdn.net ...
- 谈谈php里的IOC控制反转,DI依赖注入
理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...
- IoC控制反转与DI依赖注入
IoC控制反转与DI依赖注入 IoC: Inversion of Control IoC是一种模式.目的是达到程序的复用.下面的两篇论文是对IoC的权威解释: InversionOfControl h ...
- 谈谈php里的IOC控制反转,DI依赖注入(转)
转自:http://www.cnblogs.com/qq120848369/p/6129483.html 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和" ...
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...
- 学习Spring IOC控制反转和DI依赖注入总结
30岁的小曹,20岁的身体,还在坚持在能力允许控制范围内22点睡觉,5点起床锻炼身体,好好学习,除了加班或者像今天这样的深夜,再一次写已经有X百万人写过的 spring Ioc 的总结博客. 一.IO ...
- 三大框架 之 Spring(IOC控制反转、DI依赖注入)
目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...
随机推荐
- android不是内部或外部命令,也不是可执行的程序或批处理文件
问题: 原因:没有配置好android sdk环境变量 解决方法: (1)切换到android sdk下的tools文件夹,再执行android命令就可以启动Android SDK管理器,我的andr ...
- HDU 4445 数学-抛物运动
D - Crazy Tank ...
- 使用SwingWork反而阻塞SwingUI
最近加载图片的过程中使用了SwingWork来下载图片,但是发现会使得Swing的UI界面假死 查看了一下资料,SwingWork的设计初衷就是为了解决卡死UI的问题,正常使用应该没有问题,但是有一点 ...
- CentOS常用基础命令大全
这篇文章主要介绍了CentOS常用基础命令大全,学习centos的朋友需要掌握的知识,需要的朋友可以参考下 1.关机 (系统的关机.重启以及登出 ) 的命令shutdown -h now 关闭系统(1 ...
- BZOJ_1576_[Usaco2009 Jan]安全路经Travel&&BZOJ_3694_最短路_树链剖分+线段树
Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第i行包含一个数 ...
- JSP-Runoob:JSP 教程
ylbtech-JSP-Runoob:JSP 教程 1.返回顶部 1. JSP 教程 JSP 与 PHP.ASP.ASP.NET 等语言类似,运行在服务端的语言. JSP(全称Java Server ...
- Python机器学习算法 — 支持向量机(SVM)
SVM--简介 <α∗j<C,可得: 构造决策函数: 5.求最优解 要求解的最优化问题如下: 考虑使用序列最小最优化算法(SMO,se ...
- hdu1512 Monkey King(并查集,左偏堆)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1512 题目大意:有n个猴子,一开始每个猴子只认识自己.每个猴子有一个力量值,力量值越大表示这个猴子打架 ...
- vue开发环境和生产环境里面解决跨域的几种方法
什么是跨域 跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据.源指协议,端口,域名.只要这个3个中有一个不同就是跨域. 这里列举一个经典的列子: #协议跨域 http://a.baidu. ...
- 汇编程序52:实验15 安装新的int9中断例程
assume cs:code ;重写int9中断例程,当按住a后松开,便会产生满屏A stack segment dw dup() stack ends code segment start: mov ...