对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时, ...
随机推荐
- nginx反向代理出错:proxy_pass
问题描述: 一台服务器代理访问另一台服务器,代码如下图所示: 重新加载nginx后不会跳到该域名,而是出现error的页面. 查看error.log日志为以下报错: 2021/03/09 23:07: ...
- 随笔:关于.net core单文件AOT编译
.Net Core单文件发布已经很流畅了(vs已支持图形化操作发布). 但类似Go或者Graalvm JDK的完全事前编译为本地机器码的红能功能,还未发布于.net 6特性中,还处于实验室中. 另外, ...
- Codeforces 1413F - Roads and Ramen(树的直径+找性质)
Codeforces 题目传送门 & 洛谷题目传送门 其实是一道还算一般的题罢--大概是最近刷长链剖分,被某道长链剖分与直径结合的题爆踩之后就点开了这题. 本题的难点就在于看出一个性质:最长路 ...
- Codeforces 453E - Little Pony and Lord Tirek(二维线段树+ODT)
Codeforces 题目传送门 & 洛谷题目传送门 一道难度 *3100 的 DS,而且被我自己搞出来了! 不过我终究还是技不如人,因为这是一个 \(n\log^2n\) + 大常数的辣鸡做 ...
- 【宏基因组】MEGAN4,MEGAN5和MEGAN6的Linux安装和使用
MEGAN(Metagenome Analyzer)是宏基因组学进行物种和功能研究的常用软件,实际上现在的Diamond+MEGAN6已经是一套比较完整的物种和功能注释流程了. 但是由于各种原因,我们 ...
- cmd查看同一个局域网内电脑IP
win+R,cmd #快速打开cmd窗口 net view #查看本地局域网内开启了哪些计算机共享 运行后可以看到已共享的计算机名称 net view ip #查看对方局域网内开启了哪些共享 ...
- header 301,显示302
header 301,显示302 一定要注意Location 后面的":"前后都不能有空格 header('HTTP/1.1 301 Moved Permanently'); he ...
- 【Linux】CentOS下升级Python和Pip版本全自动化py脚本
[Linux]CentOS下升级Python和Pip版本全自动化py脚本 CentOS7.6自带py2.7和py3.6 想要安装其它版本的话就要自己重新下载和编译py其它版本并且配置环境,主要是软链接 ...
- 02 eclipse中配置Web项目(含eclipse基本配置和Tomcat的配置)
eclipse搭建web项目 一.Eclipse基本配置 找到首选项: (一)配置编码 (二)配置字体 (三)配置jdk (四)配置Tomcat 二.Tomcat配置 三.切换视图,检查Tomcat ...
- c#Gridview添加颜色
e.Row.Cells[1].ForeColor = System.Drawing.Color.Blue;