Spring 核心与设计思想

简介: Spring 核心与设计思想

1.Spring 是什么?

Spring框架是一个轻量级的企业开发的一站式解决方案,可以基于Spring解决Java EE 开发中的所有问题。

⽤⼀句大白话概括 Spring:Spring 是包含了众多⼯具⽅法的 IoC 容器

看到这,可能你对容器会有所疑问?下面解释什么是容器


2.什么是容器

容器容器是⽤来容纳某种物品的(基本)装置。水杯用来装水的,饭盒用来装大米饭;这里面的水杯、饭盒就是一个容器。

Java中包含的容器:

List/Map -> 数据存储容器

Tomcat -> Web 容器

Spring也是一个容器,Spring它是一个IoC容器。


3.什么是IoC

IoC是 Inversion of Control 的缩写,翻译回来就是“控制反转”的意思,这一听“控制反转”绝对懵逼,当时我听见时也懵逼了;不要急,看下面咱会对他进行解释。

IoC不是一种技术,而是一种设计思想。在Java开发中,IoC意味将设计好的对象交给容器控制,而不是传统的在对象内部直接控制。说白话呢,IoC就是为了减小代码的耦合度。

他是如何减小代码间的耦合呢?看下面的例子就很好理解了!

3.1 传统程序开发

假如,我们现在构建一辆车的程序,我们的思路是这样的:



097c5471cd434d08a8321308d52fdb54.png


构建⼀辆⻋(Car Class),然⽽⻋需要依赖⻋身(FrameWork Class),⽽⻋身需要依赖底盘(BottomClass),⽽底盘需要依赖轮胎(Tire Class),最终程序的实现代码如下:

package traditional;
public class NewCarExample {
    public static void main(String[] args) {
        Car car =new Car();
        car.init();
    }
}
//车
class Car {
    private Framework framework;
    public Car() {
        framework = new Framework();
    }
    public void init() {
        framework.init();
    }
}
//车身
class Framework {
    private Bottom Bottom;
    public Framework() {
        Bottom = new Bottom();
    }
    public void init() {
        Bottom.init();
    }
}
//底盘
class Bottom {
    private Tire Tire;
    public Bottom() {
        Tire = new Tire();
    }
    public void init() {
        Tire.init();
    }
}
//车轮
class Tire {
    private int size = 20;
    public void init() {
        System.out.println("轮胎大小是" + this.size);
    }
}

传统程序开发就是当我们需要什么时,我们就在需要的时候new这个类。这样写就有一个缺陷,我们代码中轮胎大小写成20,如果有一天,有客户需要30、15…这样尺寸的轮胎上,我们就要修改这上面的代码,需要在创建 Car类实例时传入size参数;这时,不仅仅需要动Car类还要动下面的其他三个类;也就是当最底层代码改动之后,整个调⽤链上的所有代码都需要修改,可谓是牵一发而动全身。这样写代码的耦合度就很高,下面再看IoC程序开发是如何解决这个问题的!

3.2 IoC程序开发

基于以上思路,我们把调⽤汽⻋的程序示例改造⼀下,把创建⼦类的⽅式,改为注⼊传递(DI)的⽅式,具体实现代码如下:

package IoC;
import sun.dc.pr.PRError;
public class NewCarExample {
    public static void main(String[] args) {
        Tire tire = new Tire();
        Bottom bottom = new Bottom(tire);
        Framework framework = new Framework(bottom);
        Car car = new Car(framework);
        car.init();
    }
    //车
    static class Car {
        private Framework framework;
        public Car(Framework framework) {
            this.framework = framework;
        }
        public void init() {
            framework.init();
        }
    }
    //车身
    static class Framework {
        private Bottom bottom;
        public Framework(Bottom bottom) {
            this.bottom = bottom;
        }
        public void init() {
            bottom.init();
        }
    }
    //底盘
    static class Bottom {
        private Tire tire;
        public Bottom(Tire tire) {
            this.tire = tire;
        }
        public void init() {
            tire.init();
        }
    }
    //车轮
    static class Tire {
        private int size = 20;
        //自定义大小轮胎
//        public Tire(int size) {
//            this.size = size;
//        }
        public void init() {
            System.out.println("车轮大小是" + size);
        }
    }
}


709a4a552e5f4b049300da9756b1c77b.png


对比传统开发和IoC开发,它们两个的不同点,传统开发中创建实例的控制权在程序员手里,而IoC开发是我不关注创建实例的事,谁给我我都能用,这也就是控制反转,看下图就很好理解了。

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

改进之后解耦的代码的对象创建顺序是:Tire -> Bottom -> Framework -> Car


5ff13d96646443c9b741a68ecba7a48b.png


3.3 IoC再理解

回到主题 Spring上,刚开始说:Spring 是包含了多个⼯具⽅法的 IoC 容器,这就是对Spring 最核⼼的总结。那如何理解“Spring 是⼀个 IoC容器”这句话呢?

既然 Spring 是⼀个 IoC(控制反转)容器,重点还在“容器”⼆字上,那么它就具备两个最基础的功能:

将对象存⼊到容器

从容器中取出对象


Spring 是⼀个 IoC 容器,说的是对象的创建和销毁的权利都交给 Spring 来管理了;而Spring 最核⼼的功能,就是如何将对象存⼊到 Spring 中,再从 Spring 中获取对象的过程.


将对象放入到容器中有什么好处呢?

将对象存储在 IoC 容器相当于将以后可能⽤的所有⼯具制作好都放到仓

库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。⽽ new 对象的方式相当于,每次在需要⼯具时才现做工具,工具⽤完就扔掉,下次再⽤的时候还得重新做。


在IoC中还有一个技术被使用,只是我们潜移默化的忘记对他进行介绍了,我们下面就来看看它(DI)。


4.认识DI

DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思。


所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。


IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI就属于具体的实现。


相关文章
|
7月前
|
存储 搜索推荐 Java
【JavaEE进阶】 Spring核⼼与设计思想
【JavaEE进阶】 Spring核⼼与设计思想
|
Java 测试技术 开发者
Spring核心与设计思想
Spring是一个用于构建企业级应用程序的开源框架,它为Java开发者提供了一种简化和加速应用程序开发的方式。Spring框架提供了大量的功能和工具,使开发人员能够更轻松地创建各种类型的应用程序,包括Web应用程序、RESTful服务、批处理作业、消息驱动的应用程序等。
142 0
|
存储 搜索推荐 Java
【Java】Spring核心与设计思想
【Java】Spring核心与设计思想
|
存储 Java 程序员
Spring核心与设计思想(下)
Spring核心与设计思想(下)
|
存储 Java 应用服务中间件
Spring核心与设计思想(上)
Spring核心与设计思想(上)
103 0
|
存储 Java 程序员
Spring核心与设计思想
这篇文章作为Spring篇目的开篇,带领大家认识Spring,知道为什么要用Spring框架,以及了解Spring的核心与设计思想。
126 0
Spring核心与设计思想
|
存储 搜索推荐 Java
Spring【Spring的概述与设计思想】
Spring【Spring的概述与设计思想】
Spring【Spring的概述与设计思想】
Spring框架核心及设计思想
Spring框架核心及设计思想
137 0
Spring框架核心及设计思想
|
存储 搜索推荐 Java
【Spring】Spring 核心与设计思想
Spring是什么? 什么是容器? 什么是IoC? 传统程序开发 控制反转式程序开发 两种开发方式对比总结 理解SpringIoC DI 概念说明
【Spring】Spring 核心与设计思想
|
缓存 JavaScript
spring5源码系列--循环依赖的设计思想
spring5源码系列--循环依赖的设计思想
128 0