==============================================================================
当年的我,刚学Spring的时候,会想:『这IOC和AOP』是什么鬼玩意啊?一大堆的名词「控制反转」「依赖注入」「面向切面编程」。这是在给我搞笑的吧。
在最开始学的IOC折腾了一大堆的玩意,结果就是在管「创建对象」的事??逗我呢???我直接new一个对象出来不香吗?
有这种想法这种明显就是「代码写得少了,想得多了」
我们写代码,不仅仅是要能实现功能,实现完了以后我们还得对写过的代码「维护」。如果我们的代码写得很烂,那「维护」的成本就很高。
维护实际上是做什么事?
-
出了问题需要找到是哪块的代码有问题
-
在原有的基础上加入一些新的功能(也就是所谓的迭代)
面对重复的/繁琐的非业务代码:
-
如果程序出了问题,我们得看吧?谁也保证不了重复的代码就没有问题。
-
我们要想加一个新的功能,还得按原来的方式写吧?代码量会越来越多,越来越多….
上一期的「Mybatis」教程也讲到了,我们的JDBC写得好好的,运行的效率也是杠杠的。但是JDBC需要我们「自行」处理的细节太多了,我们需要在里边添加各种「重复」的代码。
我们使用ORM框架,那么我们就可以更加「专注」去实现本身的业务,ORM框架把「重复」的代码都屏蔽掉,代码维护起来就比JDBC要方便。
Spring IOC 解决的是 对象管理和对象依赖的问题。
Spring AOP 解决的是 非业务代码抽取的问题。
(这里要是没基础的同学,可能看不太懂,下面再来解释解释一下应该就没问题了)
=============================================================================
提到Spring IOC,随便去网上一搜,我们就可以看到「依赖注入」「控制反转」这两个词。
很多人都会试图要把这两个词给解释清楚,但是太难了,这两个词真的是太难给解释清楚了。
Spring IOC 解决的是对象管理和对象依赖的问题。本来我们的对象都是new出来的,而我们如果使用Spring 则把对象交给「IOC容器」来管理。
三歪这逼搞事情了。「依赖注入」和「控制反转」都没讲,现在还来了个「IOC容器」。
「IOC容器」是什么?我们可以理解为是一个「工厂」,我们把对象都交由这个「工厂」来管理,包括对象的创建和对象之间的依赖关系等等。等我们要用到对象的时候,就从这个「工厂」里边取出来。
「控制反转」指的就是:本来是「由我们自己」new出来的对象,现在交给了IOC容器。把这个对象的「控制权」给「他方」了。「控制反转」更多的是一种思想或者说是设计模式,把原有由自己掌控的事交给「别人」来处理。
「依赖注入」更多指的是「控制反转」这个思想的实现方式:对象无需自行创建或管理它们的依赖关系,依赖关系将被**「自动注入」**到需要它们的对象当中去。
最简单理解「依赖注入」和「控制反转」:本来我们的对象都是「由我们自己」new出来的,现在我们把这个对象的创建权限和对象之间的依赖关系交由「IOC容器」来管理。
悄悄话:我个人本身是不太喜欢琢磨每个词的含义的,很多时候大佬们也很难解释清楚。如果是初学的同学,也不用太纠结每个名词的具体含义,深究下去也没有太大的必要。
现在问题又来了,为什么我们要把对象给「IOC容器」来管理呢?要理解这个,我建议可以先去看看我写过的「工厂模式」
理论上,我们可以把「IOC容器」也当做是一个「工厂」,使用IOC的好处就是:
-
将对象集中统一管理,便于修改
-
降低耦合度(调用方无需自己组装,也无需关心对象的实现,直接从「IOC容器」取就好了)
=============================================================================
我们在使用Spring的时候,首先我们要学习的就是怎么把对象交给「IOC容器管理」
Spring提供了四种方式:
-
注解
-
XML
-
JavaConfig
-
基于Groovy DSL配置
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/e58c28d82e9212f561a39e186be7d4b4.jpeg)
最后
学习视频:
大厂面试真题:
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
视频:
[外链图片转存中…(img-2P6vt7oe-1712424796333)]
大厂面试真题:
[外链图片转存中…(img-p3HKUGEp-1712424796333)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!