1. 什么是Spring
说到Spring,大家都知道这是Java开发的一个框架。如果要用一句话来概括的话:Spring是包含了众多工具方法的 IoC 容器。 那么问题又来了什么是 IoC?,什么是容器?。
容器 | IoC |
---|---|
容器就是能够容纳某种物品的装置:像我们之前学过的 List(数据存储的容器)、Tomcat(Web容器) | IoC:Inversion of Control,翻译成中文:控制反转。如何理解控制反转,就是说对象的生命周期不是由程序员(当前代码片段)所控制的,而是全部交给Spring这个容器来控制,不需要我们去自己new这个对象 |
通过下面代码来解释什么是IoC
1.1 传统开发
1.11 Car.class
public class Car {
public void init(){
// 初始化车, 需要依赖整个车框架
System.out.println("初始化Car");
FramWork framWork = new FramWork();
framWork.init();
}
}
1.12 FramWork.class
public class FramWork {
// 初始化车框架,需要先有地盘
public void init(){
System.out.println("初始化FramWork");
Bottom bottom = new Bottom();
bottom.init();
}
}
1.13 Bottom.class
public class Bottom {
// 初始化底盘Bottom,需要初始化轮胎Tire
public void init(){
System.out.println("初始化Bottom");
Tire tire = new Tire();
tire.init();
}
}
1.14 Tire.class
public class Tire {
public int size = 3;
public void init(){
System.out.println("初始化Tire");
System.out.println("初始化轮胎size:"+size);
}
}
1.15 CreateCar.class
public class CreateCar {
public static void main(String[] args) {
Car car = new Car();
car.init();
}
}
在上述代码中,可以看到我们的轮子的大小是规定的,如果需要我们创建的手动输入,那么代码就要从 Tire -> Bottom -> FrameWork -> Car ,一层一层地改,就非常的麻烦。
1.2 IoC(控制权反转)开发
1.21 Car.class
public class Car {
private FramWork framWork;
public Car(FramWork framWork){
System.out.println("初始化Car");
this.framWork = framWork;
}
}
1.22 FrameWork.class
public class FramWork {
private Bottom bottom;
public FramWork(Bottom bottom){
System.out.println("初始化FrameWork");
this.bottom = bottom;
}
}
1.23 Bottom.class
public class Bottom {
private Tire tire;
public Bottom(Tire tire){
System.out.println("初始化Bottom");
this.tire = tire;
}
}
1.24 Tire.class
public class Tire {
public int size;
public Tire(int size){
this.size = size;
System.out.println("初始化Tire-size:"+size);
}
}
1.25 CreateCar.class
ublic class CreateCar {
public static void main(String[] args) {
Tire tire = new Tire(3);
Bottom bottom = new Bottom(tire);
FramWork framWork = new FramWork(bottom);
Car car = new Car(framWork);
}
}
1.3 传统开发 VS IoC开发
我们看出来,IoC开发可以解耦合:就是让代码的相关性变低。 这就是 IoC 开发的优点
2. Spring的核心功能
Spring是一个包含众多方法的IoC容器,那么既然是一个容器就包含两个最基本的功能
- 将对象存入容器
- 从容器中取出来对象
Spring是一个容器,对象的创建和销毁的权利都交给了 Spring 来管理,所以它本身又具备了存储对象和获取对象的能力。
2.1 DI(依赖注入)
说到 IoC ,就需要提到另外一个词 DI:指的是在程序运行期间,动态地将依赖对象获取到的过程
- IoC :是一种让程序代码能够解耦的一种目标和思想
- DI:是具体的实现方式
可以举个例子,来进一步解释两者的区别: 假如今天你去买彩票,中了一百万。这时候你非常高兴,觉得奖励自己!于是你决定去吃顿好吃的(龙虾、帝皇螃、鲍鱼),最后你决定去吃龙虾。
那么上述 吃顿好吃就是 IoC, 去吃龙虾就是 DI。