【Spring】学习Spring需要掌握的核心设计思想

这篇具有很好参考价值的文章主要介绍了【Spring】学习Spring需要掌握的核心设计思想。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Spring是什么

二、什么是IoC容器

1、什么是容器

2、什么是IoC 

 3、Spring IoC

4、DI(依赖注入)

4.1、IoC和DI的区别

5、 DL(依赖查找)


一、Spring是什么

我们通常所说的Spring指的是Spring Framework(Framework的意思就是框架),它是一个开源的框架,有着庞大的社区,这就是它之所以能长久不衰的原因,Spring支持广泛的应用场景,它可以方Java企业级的应用程序开发起来更简单。

用一句话来概述Spring:Spring是包含了众多工具方法的IoC容器。

二、什么是IoC容器

1、什么是容器

容器是用来容纳某种物品的装置。 ——来自:百度百科

我们之前了解的List和Map,他们都是用来装数据的容器,这写容器把我们需要常用到的方法都已经封装好了,我们只需要知道如何使用并且知道使用什么方法可以达到我们想要实现的效果即可。还有Tomcat是一个Web容器。同理Spring就是一个IoC容器。

2、什么是IoC 

IoC是Inversion of Control的缩写,直译的意思是"控制翻转"的意思,这是一种思想,实际上IoC表示的意思为"控制权翻转"。之前我们写的代码中对象的生命周期,是由程序员或者当前的代码片段控制的;而控制权翻转就是程序中对象的生命周期不在又程序员或者当前的代码片段控制,而是由Spring(IoC容器)来控制。

下面我们通过一个例子来了解这个IoC容器

1️⃣传统代码的写法

我们都知道构造一个汽车,首先这个车需要依赖于车身(FrameWork),而车身需要依赖于底盘(Bottom),而底盘需要依赖于轮胎(Tire),这就需要我们在写代码的时候在底盘的类中new一个轮胎的对象,在车身的类中new一个底盘的对象,在车的类中需要new一个车身的对象。

【Spring】学习Spring需要掌握的核心设计思想,Spring,spring,学习,mybatis

 我们的车肯定有不同的款式,当我们对车的组成所依赖的对象中的属性做出指定(个性化需求)的时候,一个类添加属性的时候,其他依赖(new)这个类的类,在new对象的时候都需要进行修改。

package old;
//汽车类
public class Car {
    private Framework framework;
    public Car(){
        framework = new Framework();
    }
    public void init(){
        //依赖车身
        System.out.println("构造汽车");
        framework.init();
    }
}

package old;
//车身类
public class Framework {
    private Bottom bottom;
    public Framework(){
         bottom = new Bottom();
    }
    public void init(){
        System.out.println("构建车身");
        //依赖底座
        bottom.init();
    }
}

package old;
//底盘类
public class Bottom {
private Tire tire;
    public Bottom(){
        Tire tire = new Tire();
    }
    public void init(){
        System.out.println("构建底盘");
        //依赖轮胎
        tire.init();
    }
}

package old;
//轮胎类
public class Tire {
    private int size = 20;//轮胎尺寸
    public void init(){
        System.out.println("轮胎尺寸:"+size);
    }
}

package old;
//测试类,用来创建一个汽车对象
public class Test {
    public static void main(String[] args) {
        Car car = new Car();
        car.init();
    }
}



当我们在创建这个车对象时想要这个车的轮胎尺寸小一点,这个时候就需要我们对轮胎类中的构造方法进行改造,让我们在创建车这个对象的时候,可以直接直接指定车的轮胎大小,如果想修改车的颜色,我们就需要在车身类中添加一个颜色的属性,但是这个构造方法改变之后,对应的之后的类中new的对象的操作都选要进行改变。

package old;

public class Car {
    private Framework framework;
    public Car(int size,String color){
         framework = new Framework(size,color);
    }
    public void init(){
        System.out.println("构造汽车");
        //依赖车身
        framework.init();
    }
}

package old;

public class Framework {
    private Bottom bottom;
    public String color ;
    public Framework(int size,String color){
         bottom = new Bottom(size);
         this.color = color;
    }
    public void init(){
        System.out.println("车身颜色:"+color);
        //依赖底座
        bottom.init();
    }
}


package old;

public class Bottom {
    private Tire tire;
    public Bottom(int size){
        tire = new Tire(size);
    }
    public void init(){
        System.out.println("构建底盘");
        //依赖轮胎

        tire.init();
    }
}

package old;

public class Tire {
    private int size = 20;
    public Tire(int size){
        this.size = size;
    }
    public void init(){
        System.out.println("轮胎尺寸:"+size);
    }
}

package old;

public class Test {
    public static void main(String[] args) {
        Car car = new Car(12,"red");
        car.init();
    }
}

可以看见上述的代码是"牵一发而动全身",当最底层代码改动之后,整个调用链上的所有代码都需要改动,这就是代码中的耦合性太高而导致的。

2️⃣使用IoC思想实现的代码

解决这个问题,我们可以使用IoC的思想来实现代码,我们只需要将原来自己创建的下级类,改为传递的方式(也就是注入的方式),我们在上级类中用构造方法的参数来申明这个类需要使用它的下级类。不在这个类中new这个下级类的对象,而是在Test类中统一的使用构造方法来创建这些类的对象。

【Spring】学习Spring需要掌握的核心设计思想,Spring,spring,学习,mybatis

package ioc;

//汽车类
public class Car {
    private Framework framework;
    public Car(Framework framework){
        this.framework = framework;
    }
    public void init(){
        System.out.println("car init");
        framework.init();
    }
}


package ioc;

//车身类
public class Framework {
    private Bottom bottom;
    public Framework(Bottom bottom){
        this.bottom = bottom;
    }
    public void init(){
        System.out.println("Framework init");
        bottom.init();
    }
}


package ioc;

//底盘类
public class Bottom {
    private Tire tire;
    public Bottom(Tire tire){
        this.tire = tire;
    }
    public void init(){
        System.out.println("Tire init");
        tire.init();
    }
}

package ioc;

//轮胎类
public class Tire {
    private int size = 20;
    public void init(){
        System.out.println("Tire init,size:"+size);

    }
}

package ioc;
/*
 * 模拟IoC容器,这个类中的Test构造方法,可以认为是Spring中进行的操作,我们无需关注
 * 只需要关注前面创建的汽车类。
 * */
public class Test {
    private Tire tire;
    private Bottom bottom;
    private Framework framework;
    private Car car;
    public Test(){
        this.tire = new Tire();
        this.bottom = new Bottom(this.tire);
        this.framework = new Framework(this.bottom);
        this.car = new Car(this.framework);
    }

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

可以将这个Test类中除了main方法之外的认为是Spring框架也就是IoC容器,Test构造方法中的这些内容都是在这个容器中实现好的,我们使用Spring是无需关注,只需要关注我们创建的类中需要添加和修改的属性。就比如我们想要车身为红色,只需要在Framework类中,添加一个color属性,构造这个类的构造方法的时候,需要对这个color属性添加一个初始化的操作即可。也不需要修改这个调用链上的其他类。

从这里也就可以看出我们将控制权翻转了,将控制权交给了容器,程序员不在控制这些对象的生命周期。

【Spring】学习Spring需要掌握的核心设计思想,Spring,spring,学习,mybatis

【Spring】学习Spring需要掌握的核心设计思想,Spring,spring,学习,mybatis

【Spring】学习Spring需要掌握的核心设计思想,Spring,spring,学习,mybatis

 可以看见我们创建的车的对象,想要修改一些属性,只需要修改对应的类中的构造方法,之后的都是有Test类中,也就是容器中设置车的属性即可。不在需要调整整个调用链,这就达到了解耦合的效果。

✨总结:

  • 传统的代码中类的实现是上级类控制着下级类,下级类对象的创建和销毁都是由上级类控制,也就是程序员控制。而改进之后的解耦合的代码中上级类不在控制下级类对象的创建和销毁,而是把下级对象注入到当前的对象中,下级对象的控制权不在由上级类控制,这样即使下级类发生了任何变化,上级类都是不受影响的,这就是IoC的实现思想。
  • IoC的好处就是,对象的生命周期(对象的创建和销毁)不再由程序员来控制,而是交给了IoC容器也就是由Spring框架来处理,实现了解耦,使程序的可维护性提高。

 3、Spring IoC

Spring是包含了多个工具方法的IoC(控制反转)容器,他是一个容器,那么就存在最基本的两个功能。

  1. 将对象(Bean)存入Spring容器中;
  2. 从Spring容器中取出对象(bean);

将对象存放到容器中的好处:将对象存储到IoC容器相当于将以后可能用的所有工具制作好都放在仓库中,需要的时候直接取就可以,用完了再把它放回到仓库,而new对象的方式相当于,每次需要工具的时候, 都需要现场从0开始制作,使用完成之后,将这个工具不保存直接扔掉,下次使用的时候再创建,这就是IoC容器和普通程序开发的区别。

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


4、DI(依赖注入)

DI是Dependency Injection的缩写,翻译成中文就是"注入依赖"的意思。

所谓依赖注入,就是由IoC容器再运行期间,动态的将某种依赖关系注入到对象之中。就像我们之前的IoC思想代码,在运行Car类的时候,需要的依赖的是Framework类,他会再容器中找到,并赋值给Car类中的framework属性。这个过程就是动态的将依赖注入到对象中,这也就是依赖注入。

4.1、IoC和DI的区别

  • 相同点:IoC和DI是从不同的角度描述了同一间事情,就是指通过引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦。
  • 不同点:IoC是"目标"也是一种设计思想,而且目标和思想只是一种指导原则,最终还是要有可行的落地方案,而DI就是IoC的一种具体实现。

5、 DL(依赖查找)

依赖查找(DL)也是IoC(控制翻转)的一种实现方式,DL是Dependency Lookup的简称。

在依赖查找中,对象负责查找她所依赖的对象,而不是将依赖关系委托给容器。容器只负责管理大对象的生命周期,而不负责对象之间的依赖关系。

依赖注入和依赖查找的区别在于,依赖注入是将依赖关系委托给容器,由容器来管理兑现之间的依赖关系;而依赖查找是由对象自己来查找他所依赖的对象,容器只负责管理对象的生命周期。文章来源地址https://www.toymoban.com/news/detail-623472.html

到了这里,关于【Spring】学习Spring需要掌握的核心设计思想的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring框架核心与设计思想

    我们一般所说的Spring指的是Spring Framework(Spring 框架),它是一个开源的框架,Spring支持广泛的应用场景,它可以让Java企业级的应用程序开发变得更简单,官方一点的回答:spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级

    2023年04月15日
    浏览(33)
  • Spring框架概述及核心设计思想

    我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因;Spring 支持广泛的应用场景,它可以让 Java 企业级的应用程序开发起来更简单。 用⼀句话概括 Spring: Spring 框架是包含了众多工具方法的

    2024年02月16日
    浏览(27)
  • 【JavaEE进阶】Spring核心与设计思想

    我们通常所说的 Spring 指的是 Spring Framework (Spring 框架),它是一个轻量级的 Java 开源框架,有着活跃庞⼤的社区。Spring 是为了解决企业应用开发的复杂性而创建的,不仅⽀持⼴泛的应⽤场景,还让 Java 企业级的应⽤程序开发更加简单。 如何简单地使⽤⼀句话概括 Spring:

    2024年02月13日
    浏览(41)
  • 【JavaEE进阶】——第二节.Spring核心和设计思想

    文章目录 前言 一、Spring是什么? 二、什么是容器? 三、什么是IoC? 3.1 初始loC 3.2 举例解释loC 3.3 Spring IoC思想的体现 四、什么是DI? 4.1DI的概念 4.2 Ioc和DI的区别 总结 今天我们将进入到有关spring的认识当中,要使用它的前提就是要认识并熟悉它,上一节我们介绍了有关mave

    2023年04月18日
    浏览(31)
  • 【Spring】Spring有什么用?Spring核心与设计思想之IOC与DI

     Spring是一个开源的、轻量级的、面向企业级的Java应用框架。它提供了一种基于依赖注入和面向切面编程的方式,帮助开发者构建高效、可扩展的应用程序。  具体来说, Spring可以看作一个包含众多工具方法的IOC容器。 Spring的出现是为了让开发更简单~ 那么问题就很明确了

    2024年02月10日
    浏览(33)
  • 敏捷设计的的4个核心思想

    来自《互联网产品之美》。 4个核心思想 1、强调面对面的沟通,也就是说沟通很重要,任何人的相互交流胜于任何流程和工具; 2、要把精力集中在可执行的程序上,可以运行的产品胜于综合性文档,也就是强调了原型、模型、演示等的重要性; 3、团队合作和团队激励,合

    2024年02月09日
    浏览(40)
  • 《移动互联网技术》 第十章 系统与通信: 掌握Android系统的分层架构设计思想和基于组件的设计模式

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(46)
  • 【JavaEE进阶】 Spring核⼼与设计思想

    我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的应⽤程序开发起来更简单。 ⽤⼀句话概括 Spring: Spring 是包含了众多⼯具⽅法的 I

    2024年02月04日
    浏览(31)
  • 【开源与项目实战:开源实战】84 | 开源实战四(上):剖析Spring框架中蕴含的经典设计思想或原则

    在 Java 世界里,Spring 框架已经几乎成为项目开发的必备框架。作为如此优秀和受欢迎的开源项目,它是我们源码阅读的首选材料之一,不管是设计思想,还是代码实现,都有很多值得我们学习的地方。接下来,我们就详细讲讲 Spring 框架中蕴含的设计思想、原则和模式。因为

    2024年02月12日
    浏览(31)
  • 二十四种设计模式与六大设计原则(三):【装饰模式、迭代器模式、组合模式、观察者模式、责任链模式、访问者模式】的定义、举例说明、核心思想、适用场景和优缺点

    接上次博客:二十四种设计模式与六大设计原则(二):【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 装饰模式【Decorator Pattern】 定义 举例说明 核心思想 适用场景 优缺点 迭代

    2024年04月17日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包