Spring中IOC与DI
文章目录
- Spring中IOC与DI
- 前言
- 一、什么IOC(控制反转)?
- 二、通俗理解IOC
- 三、什么是DI(依赖注入)?
- 总结
前言
在了解什么IOC与DI之前,要先大致了解Spring框架
Spring框架是一种企业常用的轻量级框架,其技术核心就是IOC(控制反转)与AOP(面向切面编程)。
一、什么IOC(控制反转)?
IOC(Inversion of Control)很多书译为控制反转,也有一些书籍翻译为控制倒置。那么什么是控制反转呢?我的理解是控制权发生了反转。举个例子,对象A在初始化或使用时需要用到对象B,那么A就必须使用已经声明的对象B或者创建一个对象B,这种情况下,我们称之为A依赖于B。注意,这个时候主动权是在我们自己手上的。但是,当我们引入IOC后,对象A在初始化或者使用的时候会交由IOC去使用已经声明的对象B或者创建对象B,这个时候主动权在IOC手上,已经不是我们能控制的了,这就是所谓的控制反转。
二、通俗理解IOC
可能上面的例子有些绕口,大家理解的不是很清楚,我们举一个通俗一点的例子:
不知道大家有没有过相亲的经历,虽然本人母胎solo,但是幸好还没有遭受相亲的荼毒[贱笑.jpg]大家相亲都是通过谁介绍的呢,相信除了父母亲人外很大一部分都是来自婚恋网站吧。比如我之前找对象,就想找一个有颜有钱的小奶狗,但是遇不到······但是当我登录婚恋网站,把自己的要求输入,婚恋网站就会通过我的要求匹配到一堆所谓的有颜有钱的小奶狗[嘻嘻嘻.jpg]。之前自己找对象的时候,主动权在自己的手里,后来由于婚恋网站的介入,我就不自己找对象了,而是由婚恋网站给我推送,这时主动权就在婚恋网站那里,婚恋网站在其中充当的角色就是IOC。
三、什么是DI(依赖注入)?
DI(Dependency Injection)即依赖注入。怎么理解DI呢——上文说过对象A需要使用对象B,即A依赖B,我们引入IOC后,对象A与对象B没有了直接的关系,实现了解耦,那么注入依赖是谁来完成的呢?就是使用DI。至于DI到底是如何实现依赖注入的——反射。
反射是JDK1.3后出现的一个较为重要的特征,至于Java中的反射机制那就是后话了,那是一个大课题,笔者也刚刚入门,在此就不赘述了。
总结
DI其实就是IOC一种实现方式,实现IOC的方式有很多,DI只是一种方式!