一文让你了解什么是Spring?

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。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个想打拳的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值