目录
Spring是什么?
Spring是包含了众多工具方法的IoC容器
1.什么是容器?
百度百科上对容器的解释:容器是⽤来容纳某种物品的(基本)装置。
我们之前接触过的容器有哪些呢?
List/Map -> 数据存储容器
Tomcat -> Web 容器
Spring也是一个容器,Spring是一个IoC容器
2.什么是IoC?
IoC(Invertsion of Control)是"控制反转" 的意思,也就是说Spring是一个"控制反转的容器"
IoC的优点:实现代码的解耦,对象(Bean)生命周期交给IoC框架来维护,作为程序员无需再关注了
2.1什么是控制反转?
传统程序开发是调用者握着对对象的控制权,但是控制反转式程序开发是把原调用者握着的对象的控制权交出去让别人进行控制,因此叫控制反转
我们来看一个例子:
传统程序开发:
以上程序中,轮胎的尺⼨的固定的,然⽽随着对的⻋的需求量越来越⼤,个性化需求也会越来越多,这时候我们就需要加⼯多种尺⼨的轮胎,那这个时候就要对上⾯的程序进⾏修改了
传统程序开发的问题是:程序的耦合性高,当最底层代码改动之后,整个调⽤链上的所有代码都需要修改
那我们怎么解决传统程序开发的问题呢?
我们可以不在每个类中自己创建下级类,(如果自己创建下级类就会出现当下级类发生改变操作,自己也要跟着修改)此时我们只需要将原来有自己创建的下级类改为传入(注入)的方式.因为我们不需要在当前类中创建下级类,所以下级类即使发生变化(创建或减少参数),当前类本身也不需修改任何代码.这样就完成了程序的解耦(解决了传统程序开发的耦合性高的问题)
因此就引出控制反转式程序开发
控制反转式程序开发:
控制反转式的程序代码中,类的创建顺序是反的,传统代码是 Car 控制并创建了Framework,Framework 创建并创建了 Bottom,依次往下,⽽改进之后的控制权发⽣的反转,不再是上级对象创建并控制下级对象了,⽽是下级对象把注⼊将当前对象中,下级的控制权不再由上级类控制了,这样即使下级类发⽣任何改变,当前类都是不受影响的.
这就是典型的控制反转,也就是 IoC 的实现思想
3.理解Spring 是⼀个 IoC容器
Spring 是⼀个 IoC(控制反转)容器,对象的创建和销毁的权利都交给 Spring 来管理了,那么它就具备两个核心的功能:
1.将对象存⼊到容器
2.从容器中取出对象
将对象存放到容器中的好处:将对象存储在 IoC 容器相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。⽽ new 对象的⽅式相当于,每次需要⼯具了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,这就是 IoC 容器和普通程序开发的区别
4. DI
DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”
所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。
5. IoC和DI的联系与区别(面试)
依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦
IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI 就属于具体的实现
⽐如说我今天⼼情⽐较好,吃⼀顿好的犒劳犒劳⾃⼰,那么“吃⼀顿好的”是思想和⽬标(是 IoC),但最后我是吃海底捞还是杨国福?这就是具体的实现,就是 DI