IOC容器(底层原理解读)

IOC的概念和原理

目录

IOC的概念和原理

1.什么是IOC

(1)控制反转:

(2)使用IOC的目的:降低耦合度

(3)IOC解耦过程图解

2.IOC的底层原理

3.IOC接口

(1)IOC思想

(2)Spring提供IOC容器实现两种方式:(两个接口)

4.ApplicationContext 接口的实现类

两个实现类的区别



1.什么是IOC

(1)控制反转:

IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想

控制:IOC意味着将你设计好的对象交给IOC容器控制,而不是传统的在你的对象内部直接控制;

           IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建;

           谁控制谁?当然是IOC容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;

           反转则是由IOC容器来帮忙创建及注入依赖对象;

           由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

IOC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。

传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;

有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

其实 IOC 对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在 IOC/DI 思想中,应用程序就变成被动的了,被动的等待 IOC 容器来创建并注入它所需要的资源了。

 

示例图:

                                                          

(2)使用IOC的目的:降低耦合度

用伪代码来比较:用工厂类来做例子(注意:工厂类不是IOC模式)

 

原始方式:一个类调用另外一个类的对象使用

 

升级后:工厂模式解耦,但是也不是完全解耦 

 

(3)IOC解耦过程图解

可能一时半会看不懂图,但是通过后面深入理解就会豁然开朗

IOC的思想就是我们仅仅通过修改XML配置文件的对象路径,就可以轻松把对象创建出来去被别的类进行调用

 

2.IOC的底层原理

(1)xml解析、工厂模式、反射

3.IOC接口

(1)IOC思想

         基于IOC容器完成,IOC容器底层就是对象工厂

(2)Spring提供IOC容器实现两种方式:(两个接口)

 

第一种: BeanFactory ,可以对IOC容器基本实现,是Spring 内部的使用接口,不提供开发人员进行使用

【加载配置文件的时候不会创建对象,在获取对象(也就是说在使用的时候)才会去创建对象】

 

第二种:ApplicationContext,是BeanFactory 接口的子接口,提供更多强大的功能,一般由开发人员使用

【加载配置文件的时候会把在配置文件中的对象进行创建】

*一般推荐使用第二种,因为Spring框架,要结合web项目进行操作,通俗点来说就是用tomcat服务器进行启动,因此把这些耗时耗内存的都在项目启动的时候进行处理更加合适

 

操作步骤:将ApplicationContext 改为 BeanFactory 【实验结果不变】

 

4.ApplicationContext 接口的实现类

查看的操作步骤如图:

打开实现类

两个实现类的区别

一个读取类路径下,绝对路径

一个读取文件路径,相对路径

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python怎么画图片 wafer map_Python wafer_map包_程序模块 - PyPI - Python中文网

晶圆图 绘制一张晶圆图。用于半导体加工和分析。 内容安装 用法键盘快捷键和鼠标用法rel"nofollow">键盘快捷键和鼠标用法 注意事项当前能力 更改日志 功能鼠标和键盘快捷键! 知道半M1-0302晶圆尺寸! 你可以改变颜色! 放大缩小&…

IOC操作Bean管理XML方式(创建对象和set注入属性)

目录 1.什么是 Bean 管理: (1)通过 Spring 创建对象 (2)通过 Spring 注入属性 2.IOC 操作 Bean 管理有两种方式: (1)基于 xml 配置文件方式实现 (1.1)基…

c# 结构体 4字节对齐_【专题4:平时遇到的问题】 之 【3.由结构体字节对齐引发的通信故障】...

希望本是无所谓有,无所谓无的,这正如脚下的路,其实地上本没有路,走的人多了,也便成了路....原创不易,文章会持续更新,感谢您的关注1.问题由来MCU给上位机发送的一帧数据中,总是多一个…

android 全局hook_【Hook】实现无清单启动Activity

引子Hook技术在android开发领域算是一项黑科技,那么一个新的概念进入视线,我们最关心的3个问题就是,它是什么,有什么用,怎么用本系列将由浅入深 手把手讲解这三大问题。本文是第三篇, 高级篇。前面两篇Hook…

IOC操作Bean管理XML方式(有参构造注入属性)

IOC操作Bean管理XML方式 目录 有参构造注入属性 (1)步骤(创建类,定义属性,创建属性对应的有参构造方法): (2)步骤:在Spring 的xml配置文件中进行配置 &a…

python3调用java_Python3-JPype调用Java代码

原博文 2019-12-31 10:54 − ## JPype调用Java代码 ### 安装所需要的库 python pip install JPype1-py3### 准备一个jar包 #### java工程目录 ![](https://img2018.cnblogs.com/blog/1895590/201912/18955... 相关推荐 2019-12-06 14:59 − 近期在Python中使用java语言的时候有…

IOC操作Bean管理XML方式(P名称空间注入)

P名称空间注入(用的不多,但是也是一种方式) 目录 P名称空间注入(用的不多,但是也是一种方式) (1)使用P名称空间注入,可以简化基于xml 配置方式 第一步:添…

textview 结束后释放_等待按键释放,你的代码如何写?

今天,还是一个问题,在QQ群(300384358)里有小伙伴一直在问一个问题,如上图。一个按键控制电机的转动,按键按下后,电机转动,按键释放,电机停止,再加一个按键按下时长的检测&#xff0c…

IOC操作Bean管理XML方式(注入空值和特殊符号)

IOC操作Bean管理XML方式(注入空值和特殊符号) 目录 IOC操作Bean管理XML方式(注入空值和特殊符号) (1)通过null标签注入空值: 标签注入空值 (2)属性值中包含特殊符号…

麦克风增强软件_唱吧麦克风不会唱歌用它唱都好听,《向往的生活》同款麦克风...

当代年轻人的快乐,其实很简单。被工作狠狠虐了千百遍后,只要到KTV吼几嗓子放松一下,就又和这个世界和解了。唱歌,真的是一件解压又治愈的事情。就像《向往的生活》里,何炅、黄磊和其他嘉宾,饭后娱乐就是唱歌…

bert 多义词_广告行业中那些趣事系列15:超实用的基于BERT美团搜索实践

摘要:本篇主要学习和分析BERT在美团搜索排序中的项目实践。首先介绍了业务背景,主要对比了美团搜索业务场景和我们的应用场景;然后讲了下计算query和doc相关性的方法,主要包括计算字面相关性和计算语义相关性,重点介绍…

vba 跳到下一个循环_遍历工作薄和工作表(For Each循环的利用)

今日的内容是“VBA之EXCEL应用”的第三章“工作簿(Workbook)和工作表(Worksheet)对象(Object)”中第三节“遍历工作薄和工作表(For Each循环的利用)”。“VBA之EXCEL应用”这套教程从简单的录制宏的讲解,一直到窗体的搭建,内容丰富,案例众多。…

IOC操作Bean管理XML方式(注入外部bean)

目录 1..注入属性-外部 bean (1)创建两个类 service 类和 dao 类【分别创建两个包存放两个类】 (2)在 service 调用 dao 里面的方法 (3)(后来做法)在Spring 配置文件中进行配置 1…

数据增强 transform_深度学习-Pytorch框架学习之数据处理篇

前言数据是深度学习的核心,大部分论文里都会提到data-driven这个词,也就是数据驱动的意思。基本的模型搭建完成后,如何处理数据,如何将数据送给网络,如何做数据增强等等,对于提高网络的性能都十分重要&…

IOC操作Bean管理XML方式(注入内部 bean 和 级联赋值)

目录 1.注入属性-内部 bean (1)一对多关系:部门和员工 (2)在实体类之间表示一对多关系 (3)在Spring 配置文件中进行配置 2.注入属性-级联赋值 (1)第一种写法类似外部…

单处理机系统的进程调度动态优先_操作系统复习笔记(王道)C2.1

进程与线程一、进程特征和概念前提:允许多个程序并发执行。1.概念PCB(process control block)进程控制块,系统利用 PCB 来描述进程的基本情况和运行状 态,进而控制和管理进程。PCB是进程存在的唯一标志。进程是进程实体的运行过程&#xff0c…

非线性动力学_非线性科学中的现代数学方法:综述

Ch0【引言】本文是作者的一个总结,力图在极度繁杂的数理知识体系中摘选出那些最广泛应用的核心工具及思想。本文主要关注的问题都是非线性的、动态的。具体地讲,主要涉及的是:微分动力系统、泛函的最优化初步(但不涉及最优控制及微…

IOC操作Bean管理XML方式(注入集合类型属性)

目录 IOC操作Bean管理XML方式(注入集合类型属性) (1)首先进行环境的搭建和准备 (2)创建一个类:用来完成集合类型属性注入 (3)在Spring 配置文件进行配置 &#xff0…

matlab 最小二乘法拟合_高中数学:最小二乘法与线性回归方程

1、怎样的拟合直线最好?——与所有点都近,即与所有点的距离之和最小。最小二乘法可以帮助我们在进行线性拟合时,如何选择“最好”的直线。要注意的是,利用实验数据进行拟合时,所用数据的多少直接影响拟合的结果&#x…

预充电电路工作原理_LED触摸调光台灯控制电路板的工作原理

一款美观实用的台灯堪称书桌上的艺术品,看着书桌上精致美观的台灯,可能还会增加一些阅读的乐趣吧。那么触摸开关台灯的工作原理到底是怎么的呢?两按键触摸调光电路板工作原理:一、两按键触摸调光电路板,触摸芯片工作电压2.4-5.5V。输入也可用…