初识Spring——IoC及DI详解

目录

一,什么是Spring

Spring设计核心

Spring核心定义

Spring官网

二,什么是IoC

IoC思想

 控制权的反转

 三,什么是DI

DI的定义

DI和IoC的关系


一,什么是Spring

Spring设计核心

我们常说的Spring其实指的是Spring Framewoke(俗称Spring框架),它是一个开源框架,有着活跃而庞大的社区,Spring框架的主要目的就是让Java企业级的程序开发起来更加简单(如JavaWeb项目中可以不需要自己实现Tomcat Servlet服务器,内部已经封装好了)。

Spring核心定义

Spring的核心定义用一句话就可以概括:Spring是包含了众多工具方法的IoC容器;既然提到了容器(类似于之前数据结构中的集合类:List Map,他们也是容器,用来存储数据的),Spring也不例外,我们学习Spring也是围绕着它如何存放和取出数据的;那么什么是IoC呢?下面详细介绍!

Spring官网

 我们可以通过Spring | Home这个URL区访问Spring官网(Java程序员必须知道的URL),在Spring官网中我们可以详细的了解到Spring的一些历史以及版本更新,用的最多的是《Projects》这个标签,在这个标签栏下面可以看见有关Spring的一些其他框架,这些框架都是基于Spring的,所以学习Spring有助于我们更好的去使用其他框架!

二,什么是IoC

IoC思想

IoC = Inversion of Control(控制反转),结合上面的定义,Spring就是一个“控制反转”的容器;很多人看完这个定义后,直接懵了,什么是控制反转?下面通过一个代码案例来演示控制反转的含义(假如,现在需要构建一辆“车”的程序,实现思路如下:构建⼀辆车(Car Class),然而车需要依赖车身(FrameWork Class),而车身需要依赖底盘(Bottom Class),而底盘需要依赖轮胎(Tire Class)),代码如下:

//Car类

public class Car {
    private Framework framework;
    
    public Car() {
        framework = new Framework();
        framework.init();
    }

    public void init() {
        System.out.println("doCar!");
    }

    public static void main(String[] args) {
        Car car = new Car();
        car.init();
    }
}

//Framework类
public class Framework {
    private Bottom bottom;

    public Framework() {
        bottom = new Bottom();
        bottom.init();
    }

    public void init() {
        System.out.println("doFramework!");
    }
}

//Bottom类

public class Bottom {

    private Tire tire;

    public Bottom() {
        tire = new Tire();
        tire.init();
    }

    public void init() {
        System.out.println("doBottom!");
    }
}


//Tire类

public class Tire {
    private int size = 15;

    public Tire() {

    }

    public void init() {
        System.out.println("size: " + size);
    }



执行结果如下:

我们在Tire类中设置了轮胎的尺寸(size)是15,如果此时我们需要更换需求,需要这个size是一个可变的,不同的用户想要不同的size,或者说想要给车添加一个颜色的属性,此时该怎么做?(此时我们需要在Tire的构造方法中传入size,这样就可以根据用户的需求进行轮胎的设计了),但是每一个类都依赖另一个类,最底层的Tire类进行了构造方法的修改,会发现上层的类都会报错:

  缺陷上述代码存在于传统的开发中,代码的耦合度很高,当最底层代码改动之后,整个调⽤链上的所有代码都需要修改;IoC应运而生,IoC作为一种指导思想就是为了解决代码的耦合性,具体实现思想为:只需要将原来由自己创建的下级类改为传递的方式(也就是注入的方式),因为我们不需要在当前类中创建下级类了,所以下级类即使发生变化(创建或减少参数),当前类本身也无需修改任何代码,这样就完成了程序的解耦!

//Car类

public class Car {
    private Framework farmework;

    //framework由Spring提供 开发人员不需要关注
    public Car(Framework farmework) {
        this.farmework = farmework;
    }

    public void init() {
        System.out.println("do car...");
        farmework.init();
    }
}

//Framework类

public class Framework {
    private Bottom bottom;

    //bottom由Spring提供 开发人员不需要关注
    public Framework(Bottom bottom) {
        this.bottom = bottom;
    }

    public void init() {
        System.out.println("do framework...");
        bottom.init();
    }
}

//Bottom类

public class Bottom {
    private Tire tire;

    //tire由Spring提供 开发人员不需要关注
    public Bottom(Tire tire) {
        this.tire = tire;
    }

    public void init() {
        System.out.println("do bottom...");
        tire.init();
    }
}

//Tire类

public class Tire {
    //添加了size和color属性
    private int size;
    private String color;

    public Tire(int size,String color) {
        this.size = size;
        this.color = color;
    }

    public void init() {
        System.out.println("size = " + size + " color = " + color);
    }
}

//Test类 

/**
 * Test类用来进行数据测试
 */
public class Test {
    public static void main(String[] args) {
        Tire tire = new Tire(15,"红色");
        Bottom bottom = new Bottom(tire);
        Framework framework = new Framework(bottom);
        Car car = new Car(framework);
        car.init();
    }
}

 控制权的反转

在传统的代码中对象创建顺序是:Car -> Framework -> Bottom -> Tire

改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car
上述就是控制权的反转!
从测试类Test中的main方法中也可以看出来控制权的反转,最先new的Tire类,最后new的Car类

 

 
Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。

 三,什么是DI

DI的定义

上面详细讲解了什么是IoC,那么与之对应的就是DI(Dependency Injection),意思是依赖注入;所谓依赖注入,就是由IoC容器在运行期间,动态的将某种依赖关系注入到对象之中

DI和IoC的关系

依赖注⼊(DI)和控制反转(IoC)是从不同的角度的描述的同⼀件事情,就是指通过引⼊入IoC 容器,利用依赖关系注⼊的方式,实现对象之间的解耦;IoC 是“⽬标”也是⼀种思想,而目标和思想只是⼀种指导原则,最终还是要有可行的落地方案,而DI就属于具体的实现。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值