Spring IOC & DI
一、Spring是什么?
Spring是一个开发的框架,包含了很多的依赖,比如Spring MVC, Spring Boot等,这些让我们开发变得容易,可以说,Spring是一个包含很多工具方法的容器。
二、IOC(控制反转)
2.1 通俗理解
Inversio of Control ,也就是说,Spring是一个 “控制反转” 的容器。
控制反转就是让一个事物的控制权交由其他人。
2.2 造汽车的例子理解IOC
造汽车的流程:
代码:
汽车类:
package com.example.springioc.v1;
public class Car {
// 汽车依赖于框架
private Frame frame;
public Car() {
frame = new Frame();
System.out.println("汽车安装框架中...");
}
}
框架类:
package com.example.springioc.v1;
public class Frame {
// 框架依赖于底盘
private Bottom bottom;
public Frame() {
bottom = new Bottom();
System.out.println("框架安装底盘中...");
}
}
底盘类:
package com.example.springioc.v1;
import jdk.jfr.Frequency;
public class Bottom {
// 底盘依赖于轮胎
private Tire tire;
// 有了尺寸的需求,需要进行传参
public Bottom(int size) {
tire = new Tire(size);
System.out.println("底盘安装轮胎中...");
}
}
轮胎类:
package com.example.springioc.v1;
public class Tire {
public Tire() {
System.out.println("打造默认尺寸轮胎中...");
}
}
运行结果:
这种代码架构,每个类的控制权都在调用他的那一方中,调用的一方创造了怎样的他,那他就是怎样的。
如果想要更换任意尺寸的轮胎,那就需要传递一个size参数,此时要依次对于代码做修改。
首先是轮胎类,需要增加 size
属性,但是这样最上层的 Car 类并不能够选择自己想要的尺寸,仍然需要对于控制着 Tire 的Bottom进行添加参数以便Frame能够添加参数,这样依赖,Frame也得添加size参数,Car 也需要。
最终代码(对于每一级都添加了size参数):
汽车类:
package com.example.springioc.v1;
public class Car {
// 汽车依赖于框架
private Frame frame;
// 对于汽车类添加了size参数构造
public Car(int size) {
frame = new Frame(size);
System.out.println("汽车安装框架中...");
}
}
框架类:
package com.example.springioc.v1;
public class Frame {
// 框架依赖于底盘
private Bottom bottom;
public Frame(int size) {
bottom = new Bottom(size);
System.out.println("框架安装底盘中...");
}
}
底盘类:
package com.example.springioc.v1;
import jdk.jfr.Frequency;
public class Bottom {
// 底盘依赖于轮胎
private Tire tire;
public Bottom(int size