浅谈 SpringIOC/DI

简单理解SpringIOC和DI

用过spring一定知道spring的IOC(控制反转)、DI(依赖注入)。这是两个很重要的概念,我稍微来写写自己的理解。

1.SpringIOC

1.1 IOC是什么

IOC(Inversion of Control)就是“控制反转”,它不是一种技术,而是一种设计思想。在spring中,使用IOC则意味着将设计好的对象交给IOC容器控制,而不是像传统的方式由我们来在对象内部控制。

理解IOC那就要理解两个方面:“谁控制谁,控制了什么”、“为什么是反转,什么东西反转了”。

谁控制谁,控制了什么”:在传统的JavaSE程序中,我们往往直接在对象内部通过new来进行对象的创建,这就是由程序主动创建依赖对象;而IOC则是专门有一个容器来创建这些对象,即用IOC容器来控制对象的创建。
容器控制了对象,控制了外部资源获取。

为什么是反转,什么东西反转了”:在传统程序中,我们是自己在对象中创建并获取依赖对象的。而在IOC中则是由容器来帮我们创建并注入以来对象。
原本主动创建并依赖的对象变为由容器帮我们查找创建并注入对象,对象只是被动的接受了依赖对象,所以是反转;依赖对象的创建和获取方式反转了。

1.2 IOC能干什么

传统应用程序中都是由我们主动在类内部创建依赖对象,使得类与类之间高度耦合,难于维护;当有了IOC容器之后,把创建和查找依赖对象的控制权交给了容器,由容器进行组合,降低了耦合度且易于维护,使得程序整体结构变得很灵活。
IOC带来的最大的改变是思想上的,原本,获取所有资源都要主动的去获取去查找,但在IOC中,则变成了被动的等待IOC容器创建并注入所需要的资源。
IOC很好的体现了“好莱坞法则(don‘t call us, we‘ll call you)”,即IOC容器帮对象找相应的依赖对象并注入,而不是由对象主动去查找。

2.DI

什么是DI

DI(Dependency Injection)就是“依赖注入”。组件之间依赖关系由容器在运行期间决定,即容器动态的将某个依赖关系注入到组件之中。
理解DI也要从两方面去理解:“谁依赖谁,为什么要依赖”、“谁注入谁,注入了什么”。
谁依赖谁,为什么要依赖”:应用程序依赖于IOC容器,因为需要IOC容器来提供对象需要的外部资源。
谁注入谁,注入了什么”:将IOC容器注入应用程序的某个对象,注入了某个对象所需要的外部资源。

Spring还有一个比较重要的内容就是SpringAOP,AOP其实也是IOC的一种实现,依赖于IOC容器进行管理相关的对象以更好的实现AOP。

参考博文IoC 之 IoC基础

猜你喜欢

转载自blog.csdn.net/smile_xg/article/details/81414980