对Spring IOC容器的思考
最近在看Spring5的视频教学,学到了IOC容器这块,对IOC有些浅薄的理解,分享一二;有错误之处,还请大佬指出
IOC(Inversion of Control 控制反转),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。什么叫降低耦合度,大致理解就是在对代码进行维护升级的时候,尽量不去动源代码,而是采用其它方式来进行功能实现,而最常用的就是利用DI(Dependency Injection 依赖注入),通过更改配置文件的方式,来进行升级维护
在讨论IOC容器之前,我们要思考,为什么我们要解耦,先来个例子:
我们每天所使用的手机可以理解为一个Phone类实例,其中它有很多组成部分来构成,比如CPU、屏幕、喇叭等等。。。这些基础的元素就是类中的一个个属性,我们也可以称之为手机的依赖,DI(依赖注入)你就可以理解为一个给属性赋值的动作。然后具体的属性比如屏幕,它又属于Screen类的一个实例,它也有自己的一些属性,比如玻璃、屏幕中间的传感器等等。这样从大到小,每个类由好多属性构成,每个属性又是一个类实例,又继续分下去,可以想象当我们要造一个最新的IPhone 13手机的时候,要为每个基础属性赋值(注入依赖),不断的new实例(比如new Glass()),然后将实例作为上一层类的属性注入,然后再重复封装,直到最后组装成为一个IPhone 13手机,这时候我们才造好了一个手机。如果我们还要造另外的手机IPhone 13Pro,那么我们又要对代码进行大规模的改动。牵一发(制造另外的手机)而动全身(更改手机的基本属性)

在实际的开发过程中,其实也是在各种类实例、基本数据类型作为类的属性,这将是一个巨大的工程,没人敢这么玩。
因此这时候,我们就需要解耦,怎么解呢?这就涉及到了今天的主题:IOC容器。
IOC容器是干嘛的呢,它其实就是解决了在实际开发过程中不用new的方式来造对象,而最常用的就是采用DI注入依赖(DI后面马上会重新写一个博客再说说我的看法),最常用的就是按配置文件来进行注入,通过DI利用反射+工厂模式,来动态的帮我们造对象,省去了上面说所的手动new的工程,在实际开发中,我们只需要对修改配置文件(DI需要用到的),就可以完成功能的升级、完善。这样,底层源代码还是底层源代码,不需要去改动,所要做的事就只是改我们的配置文件。
对Spring IOC容器的思考的更多相关文章
- Spring IOC 容器源码分析 - 循环依赖的解决办法
1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...
- Spring IOC 容器源码分析 - 获取单例 bean
1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章.在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一 ...
- Spring IOC 容器源码分析系列文章导读
1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...
- Spring IoC容器的初始化过程
Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生 ...
- 【Spring】非Spring IOC容器下获取Spring IOC上下文的环境
前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. & ...
- 学习Spring(一) 实例化Spring IoC容器
实例化Spring IoC容器 1,读取其配置来创建bean实例 2,然后从Spring IoC容器中得到可用的bean实例 Spring提供两种IoC容器实现类型 a,一种为bean工厂 b,应用程 ...
- MyEclipse Spring 学习总结一 Spring IOC容器
一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...
- 对Spring IoC容器实现的结构分析
本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内 ...
- spring IOC容器实例化Bean的方式与RequestContextListener应用
spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...
随机推荐
- [atARC086F]Shift and Decrement
将$A$操作看作直接除以2(保留小数),最终再将$a_{i}$取整 记$k$表示$A$操作的次数,$p_{i}$表示第$i$次$A$和第$i+1$次$A$之间$B$操作的次数(特别的,$p_{0}$为 ...
- java 桥接模式实现代码
写在前面 桥接模式:将抽象与实现分离,使它们可以独立变化.它是用组合/聚合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度. 使用场景1:要绘制矩形.圆形.椭圆.正方形,绘制的图形需 ...
- 洛谷 P2791 - 幼儿园篮球题(第二类斯特林数)
题面传送门 首先写出式子: \[ans=\sum\limits_{i=0}^m\dbinom{m}{i}\dbinom{n-m}{k-i}·i^L \] 看到后面有个幂,我们看它不爽,因此考虑将其拆开 ...
- 洛谷 P3711 - 仓鼠的数学题(多项式)
洛谷题面传送门 提供一种不太一样的做法. 假设要求的多项式为 \(f(x)\).我们考察 \(f(x)-f(x-1)\),不难发现其等于 \(\sum\limits_{i=0}^na_ix^i\) 考 ...
- C++ and OO Num. Comp. Sci. Eng. - Part 3.
2. Expressions and Statements 声明是将一个种类型的变量引入程序的语句. 作用域 作用域又一对花括号限定,在所有花括号之外的为全局作用域. 在作用域内声明的变量为局部变量. ...
- Linux—linux 查看一个文件有多少M
ls -l --block-size=M #就把目录下的所有文件按M单位呈现
- 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...
- day11 四层负载均衡和http协议
day11 四层负载均衡和http协议 四层负载均衡和七层负载均衡的区别 四层和七层负载均衡的区别 四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发.由此可以看出,七层负 ...
- Spark基础:(七)Spark Streaming入门
介绍 1.是spark core的扩展,针对实时数据流处理,具有可扩展.高吞吐量.容错. 数据可以是来自于kafka,flume,tcpsocket,使用高级函数(map reduce filter ...
- pyqt5 改写函数
重新改写了keyPressEvent() class TextEdit(QTextEdit): def __init__(self): QtWidgets.QTextEdit.__init__(sel ...