目录
一、认识Spring
Spring
指的是 Spring Framework(
Spring 框架),一句话
概括:Spring是包含了众多工具方法的IoC容器。
其中Spring容器包含了两个最核心的功能:
(1)将 bean (对象) 存入Spring容器中(2)从Spring容器中取出 bean (对象)
Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。
将对象存放到容器中的好处:将对象存储在 IoC 容器相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。⽽ new 对象的⽅式相当于,每次需要⼯具
了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做,这就是 IoC 容器和普通程序开
发的区别。
二、什么是IoC
IoC的含义是控制反转,举个汽车例子可以更好的帮助我们理解何为控制反转。
构建⼀辆⻋(Car Class),然⽽⻋需要依赖⻋身(FrameWork Class),⽽⻋身需要依赖底盘(
Bottom Class),⽽底盘需要依赖轮胎(Tire Class),由上往下一层层实现,见下图所示:
![](https://img-blog.csdnimg.cn/fa8416cf7ce74c7887ae3fc99765cdc2.png)
public class Demo {
public static void main(String[] args) {
Car car= new Car();
car.func();
}
/*
* 汽车*/
static class Car{
public void func(){
//依赖车身
FrameWork frameWork =new FrameWork();
frameWork.func();
}
}
/*
* 车身*/
static class FrameWork{
public void func(){
//依赖底盘
Bottom bottom =new Bottom();
bottom.func();
}
}
/*
* 底盘*/
static class Bottom{
public void func(){
//依赖轮胎
Tire tire = new Tire();
tire.func();
}
}
/*
* 轮胎*/
static class Tire{
public void func(){
int size = 20;
System.out.println("轮胎尺寸:"+size);
}
}
}
一种汽车型号的轮胎尺寸大小是固定的,当需要生产不同尺寸大小的轮胎尺寸时,此时就需要由上到下修改轮胎尺寸参数,十分繁琐。为此我们转换思路,将原来由⾃⼰创建的下级类,改为传递的⽅式(也就是注⼊的⽅式),因为我们不需要在当前类中创建下级类了,所以下级类即使发⽣变化(创建或减少参数),当前类本身也⽆需修改任何代码,这样就完成了程序的解耦。
在传统的代码中对象创建顺序是:Car -> Framework -> Bottom -> Tire
改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car
![](https://img-blog.csdnimg.cn/fa8416cf7ce74c7887ae3fc99765cdc2.png)
![](https://img-blog.csdnimg.cn/9d4125a1102e4b3f8b6b175e40fa91ce.png)
IoC容器的优点:实现了代码的解耦,无需关注代码实现的细节
三、什么叫DI
谈到 IoC 控制反转时,这时候就得说起 DI(依赖注入)
所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容
器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
说到这里,我们可以理解为:IoC控制反转是一种思想,而DI依赖注入是一种实现
例子:我今天下午想要去吃海底捞,我想要去干啥,这是一个思想,相当于IoC控制反转
而今天下午我最终去吃了烧烤,这是一个具体的实现,这就是DI依赖注入
四、总结
1、Spring是什么?如何理解Spring?
Spring是包含了众多工具方法的IoC容器,
Spring可以将bean对象存在Spring容器中,同时也可以从Spring容器中取出bean对象。
2、IoC和DI是啥?有啥区别?
IoC 叫作控制反转,DI 叫做依赖注入,IoC是一种目标思想,而DI是一种目标实现
IoC容器的优点:实现了代码的解耦,无需关注代码实现的细节
例如:我下午想要去吃海底捞,最后我选择了去吃麦当劳,这就是思想与实现
3、Spring最核心的功能是什么?
1、将bean对象存在Spring容器中
2、从Spring容器中取出bean对象