Spring二三事(一)

新的一年在求职过程中,面试官总会问道你对Spring有什么样的理解,其实我们在熟练运用后很少去真正去深究其底层内部原理,但我们对于这个框架只有挖到更深的层次才会在之后工作中对其有一个更为深刻的认知和理解,这样在我们项目开发中会起到很大的助力作用
我将对Spring展开一个较为详细的分析和总结,希望有不足的地方欢迎大家提出指正!!

什么是IOC

IOC:Inversion of Control,字面意思是控制反转。其实这本质是一种思想。在我们的Java开发中,我们通过IOC将传统的对象内部控制交给外部容器去控制。我们在这里需要理解:是谁控制谁?控制的是什么?何为反转?哪些东西做了反转?我们在这里需要一起分析一下:
谁控制谁?控制的是什么? 在传统的Java开发中,我们一般采用在对象内部通过new来创建对象,是程序主动去创建依赖对象;而IOC有一个专门的一个容器来创建这些对象,即由IOC容器来控制对象的创建。控制的是什么?主要就是控制了外部资源的获取(不只是对象还可能有文件等)
何为反转?反转了什么? 既然有反转,那么也就有正转了,传统开发中是由我们自己在对象中主动控制去直接获取依赖对象,这就是正转;反转的概念是由容器来帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以为反转。反转了什么?依赖对象的获取被反转了。
传统应用程序示意图

在传统程序中客户端会
	1.创建用户类
	2.创建用户信息类
	3.将用户信息类主动注入到用户类中

有IOC容器后程序结构示意图

IOC容器:1.创建用户类
		2.看用户类是否有依赖对象需要注入
		3.有用户信息类需要注入,首先创建用户信息类,然后将其注入到用户类
		4.由容器管理这些对象的生命周期
客户端类:直接从容器获取用户类

IOC能做什么

IOC其实不是一种技术, 只是一种思想,是一个重要的面向对象编程的发则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建对象,从而导致了类与类之间的高耦合,难于测试;有了IOC容器之后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样方便测试,利于功能复用,更重要的是使得整个程序的整个体系结构变得非常灵活。
其实IOC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IOC/DI思想中,应用程序就变成被动的了,被动的等待IOC容器来创建并注入它所需的资源了。
IOC很好的体现了面向对象的法则之一:好莱坞法则:“别找我们,我们去找你”;即由IOC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

DI是什么

DI:Dependency Injection,即“依赖注入”:是组件之间的依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建了一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可以指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处由谁实现、
我们理解DI的关键在于“谁依赖谁,为什么需要依赖,谁注入依赖,注入了什么”,我们需要逐个分析一下:
谁依赖谁: 当然是应用程序依赖IOC容器;
为什么需要依赖: 应用程序需要IOC容器来提供对象需要的外部资源;
谁注入谁: 很明显IOC容器注入应用程序某个对象,应用程序依赖的对象;
注入了什么: 就是注入某个对象所需要的外部资源(对象、资源、相应数据)。

IOC和DI是什么关系?
其实二者是对同一概念的不同角度的描述,由于控制反转概念比较模糊(可能只是理解为容器控制对象这一层面,很难让人想到谁来维护对象关系),所以在2004年Martin Flower又提出了这个新的名字:“依赖注入”,相对IOC而言,“依赖注入明确描述了被注入对象依赖IOC容器配置依赖对象”。

这一篇主要针对Spring提出IOC和DI的概念,先对其有一个初步的认识,下一步我们对其原理再进行进一步研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值