目录
- 1.Spring是什么
- 1.1什么是容器
- 1.2什么是IoC
- 1.3什么是DI
- Spring的核心功能
1.Spring是什么
用官方的话来说:Spring是包含众多工具方法的IoC容器
但是仅仅这样一句话,就会让大家有许多不解?什么是IoC?什么是容器?接下来围绕这句话进行解释
1.1什么是容器
容器,顾名思义就像我们的水杯一样,可以装水也可以倒水。我们很早就接触过类似的东西,例如:
Map,List就是数据存储容器
Tomcat就是Web容器
Spring也是如此
1.2什么是IoC
IoC是控制反转的英文缩写,单单一个控制反转是没办法让我们明白IoC是什么的,这里就需要一个形象的例子来解释。
将上图转换为代码一般为:(为方便写一起了)
public Class Main{
Car car;
public void init(){
Car car=new Car();
car.init();
}
}
public Class Car{
Body body;
public void init(){
Body body=new Body();
body.init();
}
}
public Class Body{
Bottom bottom;
public void init(){
Bottom bottom=new Bottom();
bottom.init();
}
}
public Class Bottom{
Tire tire;
public void init(){
Tire tire=new Tire();
tire.init();
}
}
public Class Tire{
int size=20;
public void init(){
//
}
}
这么写看样子没问题,但缺有个非常大的缺陷。注意看,如果,此时我的Tire不再是固定轮胎大小,而是想根据传入的参数确定大小,就像:
public Class Tire{
int size=20;
public Tire(int size){
this.size=size;
}
public void init(){
//
}
}
一旦这里修改,我们调用Tire类的Bottom类的代码也要修改,一旦Bottom要该,他的上级是不是也要修改。如果这里的上级过多,是不是牵一发而动全身了。为什么会这样,这是因为代码的耦合性太高了,所以IoC就是解代码耦合的一种思想或目标。
采用IoC的思想,之前我们是把Tire对象的生命周期安排在程序员自己手中,也就是我们在Bottom里面创建。现在我们把这个控制权交给Spring。这里Main里面的代码不要过多关注,只是模拟Spring的存取对象,主要是看思想。我们可以这样处理代码:
我们不再在Bottom中new Tire 而是直接给他注入一个Tire对象,往上亦是如此。
public Class Main{
public void init(){
Tire tire=new Tire(100);
Bottom bottom=new Bottom(tire);
Body body=new Body(bottom);
Car car=new Car(body);
car.init();
}
}
public Class Car{
Body body;
public Car(Body body){
this.body=body
}
public void init(){
body.init();
}
}
public Class Body{
Bottom bottom;
public Car(Bottom bottom){
this.bottom=bottom;
}
public void init(){
bottom.init();
}
}
public Class Bottom{
Tire tire;
public Car(Tire tire){
this.tire=tire;
}
public void init(){
tire.init();
}
}
public Class Tire{
int size=20;
public void init(){
//
}
}
按上修改后,我们再修改Tire类将不再影响Bottom,我们的代码耦合性就变低了,观察两种代码,我们可以发现一个区别:我们类的创建反过来了。
第一种是先Car再到Tire,而第二种是Tire再到Car,改进后不再是上级类创建下级类了,而是下级类创建完注入到上级类中,它实现了控制权的反转,此时下级类的改变不再影响上级,这就是IoC的思想。
1.3什么是DI
说到IoC就必须要提到的是DI,那么什么是DI呢?DI是依赖注入的英文缩写。
一般来说,IoC和DI是同一概念的不同阐述。但更细一点的话,IoC是解耦合的思想,DI是具体手段。
Spring的核心功能
想要了解Spring的核心功能,还是得归结到Spring是什么这句话上:
Spring是包含众多工具方法的IoC容器
作为容器最重要的就是存取内容。那么学习Spring就是学习他的核心:
如何将对象存⼊到 Spring 中,再从 Spring 中获取对象的过
程
那么这样又什么好处呢?把对象当作工具,每次创建对象都是重新制造工具,那么为何不制造好要用的时候直接用呢?Spring作为容器,把你的对象的创建和销毁的权利都交给 Spring 来管理,就可以解决这个痛点。
接下来,我会同步的更新Spring之后的内容,给你最优的学习路线,还请多多点赞和关注!