什么是IoC?什么是Spring IoC?什么是DI?

这篇具有很好参考价值的文章主要介绍了什么是IoC?什么是Spring IoC?什么是DI?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先说明 IoC 是一种思想,IoC的全称是Inversion of Control,翻译成中文叫做“控制反转”

用人话来说,IoC的思想就是将一个对象对另一个对象的控制权交出去(不必关心交给谁),从而让对象之间的依赖关系降低,降低代码之间耦合程度。

我们可以写一个简单的代码来举个例子

假如说我们现在要“造一台车”,那么我们首先需要一个车框架

public class Car {
    FrameWork frameWork;

    public Car(){
        frameWork.init();
    }
}

那么造好了车框架,我们需要在车框架上面安装一个底盘

public class FrameWork {
    Bottom bottom;

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

    public void init(){
        System.out.println("i am framework......");
    }
}

那么造好了底盘,我们需要在底盘合适的位置安装好轮胎

public class Bottom {
    Tire tire;
    
    public Bottom(){
        tire = new Tire();
        tire.init();
    }
    
    public void init(){
        System.out.println("i am framework......");
    }
}

最后我们需要把轮胎造好,那么这辆车就拼装完成了

public class Tire {
    public void init(){
        System.out.println("i am tire......");
    }
}

假设我们有一天想要一辆定制的车,比如我想要一辆轮胎是17寸大小的车,那么我就需要传递参数将代码进行修改

//轮胎
public class Tire {
    
    int size;
    
    public Tire(int size){
        this.size = size;
    }
    
    public void init(){
        System.out.println("i am " + size + "tire......");
    }
}

//底盘
public class Bottom {
    Tire tire;

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

    public void init(){
        System.out.println("i am framework......");
    }
}

//框架
public class FrameWork {
    Bottom bottom;

    public FrameWork(int size){
        bottom = new Bottom(size);
        bottom.init();
    }

    public void init(){
        System.out.println("i am framework......");
    }
}

//车
public class Car {
    FrameWork frameWork;

    public Car(int size){
        frameWork = new FrameWork(size);
        frameWork.init();
    }
}

可以看到,我们需要层层向上,不断地修改代码来传递参数,从而达到“定制化的过程”

那么如果我们使用IoC的思想来实现这个“车”,代码应该就是这样的

    public class FrameWork {
        public FrameWork(Bottom bottom){
            bottom.init();
        }
        public void init(){
            System.out.println("i am framework......");
        }
    }

    public class Bottom {
        public Bottom(Tire tire){
            tire.init();
        }

        public void init(){
            System.out.println("i am bottom......");
        }
    }

    public class FrameWork {
        public FrameWork(Bottom bottom){
            bottom.init();
        }
        public void init(){
            System.out.println("i am framework......");
        }
    }    


    public class Car {
        public Car(FrameWork frameWork){
            frameWork.init();
        }
    }

    public static void main(String[] args) {
        Tire tire = new Tire(17);
        Bottom bottom = new Bottom(tire);
        FrameWork frameWork = new FrameWork(bottom);
        Car car = new Car(frameWork);
    }

我们使用IoC的思想来写代码可以发现,当我们对Tire这个类进行修改的时候,只需要在创建Tire的时候传入参数就可以完成修改了,并不需要再像以前一样层层递归的修改代码。

通过IoC的思想我们让代码的耦合程度降低,让代码更加的灵活,让程序更加的简单了


说完了IoC,那么就来谈谈什么是Spring IoC

Spring IoC就是实现了具体IoC思想的框架,在这个Spring框架中存在一个IoC容器,通过这个容器我们可以存对象,也可以取对象。等同于说我们将对象的创建与销毁都交给了IoC容器来进行管理,同时在这个容器中既可以存对象也可以取对象!


那么什么是DI呢?DI全称“Dependency Injection”,翻译成中文是依赖注入

DI实际上就是对IoC思想的具体实现方式,我们通过依赖注入的方法,从Spring容器中取出对象,注入到对象中去!由于Spring IoC容器的存在,我们在存储对象的时候就将依赖关系交给Spring IoC容器来进行托管了,当我们创建对象并使用注入的方式,就可以自动的将该对象所依赖的对象注入到该对象中。这就是DI,实现了具体的IoC思想的行为!

举个例子

在传统的编程方式中,当类A依赖于类B时,我们通常会在创建A的实例时,手动创建B的实例并将其传递给A的构造函数或者通过其他方式设置依赖关系。这样的做法在小规模项目中可能没有问题,但随着项目规模的增大,依赖关系的管理将变得复杂而且容易出错。

而在DI(依赖注入)中,Spring IoC容器会负责管理所有的bean对象的创建和依赖关系。当创建A的实例时,Spring IoC容器会自动检查A所依赖的B是否已经在容器中创建,并将B的实例自动注入到A中,无需手动介入。

这种方式的好处在于:

  1. 解耦:类A不需要关心B是如何创建的,也不需要负责B的生命周期管理。
  2. 灵活性:如果需要更换B的实现,只需在配置文件中修改B的配置即可,而不需要修改A的代码。
  3. 可测试性:在测试时,可以轻松地将虚拟的B实例注入到A中,以便进行单元测试。

总之,DI通过将对象之间的依赖关系交由IoC容器来管理,使得代码更加清晰、易于维护,同时也提高了项目的灵活性和可测试性。

我们再以厨师做菜为例子

DI的过程如下:

  1. 厨子需要准备一道菜,而这道菜需要食材。
  2. 厨子并不直接去寻找或创建食材,而是通过向食材供应商(想象成IoC容器)请求所需的食材。
  3. 食材供应商根据厨子的请求,提供相应的食材,即便如此,食材的获取和管理都是由食材供应商来完成。
  4. 厨子接收到食材后,根据食谱,进行烹饪并最终完成了一道美味的菜品。

这个例子中,厨子(我们)就是应用程序的主体,而食材供应商(DI容器,如Spring IoC容器)则负责管理和提供依赖(食材)。厨子无需关心如何获取食材(依赖),只需要向供应商(容器)说明需要什么依赖,供应商会将所需的依赖注入到厨子中。

这就是为什么DI是实现了具体IoC思想的行为,因为我们的主体不再控制依赖了,而是通过注入的方式来实现依赖!文章来源地址https://www.toymoban.com/news/detail-634735.html

到了这里,关于什么是IoC?什么是Spring IoC?什么是DI?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Spring框架IOC容器和DI依赖注入

    IOC(Invertion Of Control):控制反转,使用对象时,由使用new创建对象转变为由外部提供对象,此过程中对象的创建控制权由程序转移到外部的思想称之为控制反转. DI(Dependency Injection):依赖注入,在容器中建立bean与bean之间的关系的过程,称之为依赖注入 pom.xml依赖引入 BookDao BookDaoImpl Book

    2023年04月09日
    浏览(89)
  • 【Spring框架三】——Spirng IOC和DI的实现

    【Spring框架一】——Spring框架简介 本篇博客主要总结的是以Spring 5为例,通过XML方式和注解的方式分别实现IOC和DI。并使用Spring5 进行基础运用。 创建Maven项目:使用IDE创建一个maven项目 添加Spring依赖:在Maven配置文件pom.xml中添加Spring框架的依赖项 这样Spring的基础环境已经搭

    2024年02月05日
    浏览(55)
  • Spring 是什么?IoC 和 DI的区别

    我们通常讲的Spring指的是Spring Framework(Spring框架),它是一个开源的框架,有着活跃而庞大的社区,这也是它之所谓经久不衰的原因。官方的解读是:Spring官网 翻译过来就是:Spring使Java编程对每个人来说更快、更容易、更安全。Spring对速度、简单性和生产力的关注使它成为全球最受欢

    2024年02月08日
    浏览(46)
  • 【Spring篇】IOC/DI注解开发

    🍓系列专栏:Spring系列专栏 🍉个人主页:个人主页 目录 一、IOC/DI注解开发 1.注解开发定义bean  2.纯注解开发模式 1.思路分析 2.实现步骤 3.注解开发bean作用范围与生命周期管理 1.环境准备 2.Bean的作用范围 3.Bean的生命周期 4.注解开发依赖注入 1.环境准备 2.注解实现按照类型注入

    2024年02月03日
    浏览(76)
  • 【Spring】Spring有什么用?Spring核心与设计思想之IOC与DI

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

    2024年02月10日
    浏览(44)
  • Java语言开发在线小说推荐网 小说推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习开发

    1、开发工具和使用技术 MyEclipse10/Eclipse/IDEA,jdk1.8,mysql5.5/mysql8,navicat数据库管理工具,tomcat,SSM(spring+springmvc+mybatis)开发框架,jsp页面,javascript脚本,jquery脚本,bootstrap前端框架(用户端),layui前端框架(管理员端),layer弹窗组件等。 2、实现功能 前台用户包含:注

    2023年04月26日
    浏览(84)
  • Java Spring IoC&DI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:Java Spring IoCDI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性 🎉欢迎大家点赞👍评论📝收藏⭐文章 我们一下要学习的内容都是为了实现⾼内聚低耦合来进行的 软件设计原则:⾼内聚低耦合. ⾼内聚指

    2024年04月15日
    浏览(48)
  • Spring IoC容器、IoC与DI

    目录 Spring是什么? 理解容器  什么是IoC(Inversion of Control) 传统的new创建对象的方式中类与类的耦合程度很大。  IoC的优势:  Spring IoC容器最核心的功能  什么是DI (Dependency Injection) IoC和DI的区别  Spring是指Spring Framework(Spring框架),它是开源的框架,有着很庞大的社区,通过

    2023年04月21日
    浏览(98)
  • Spring IoC&DI

    前面我们大概知道了什么是 Spring,以及 Spring 家族中 Spring Boot 和 Spring MVC的开发,但是 Spring 到底是什么呢? 前面我为大家简单介绍了什么是 Spring 【Spring】什么是Spring,不过前面的介绍较为简单,要想知道Spring 的原理,这些知识不不足以帮助我们了解 Spring 的,所以这篇文

    2024年02月04日
    浏览(45)
  • 【学习】Spring IoC&DI

    🎥 个人主页:Dikz12 📕格言:吾愚多不敏,而愿加学 欢迎大家👍点赞✍评论⭐收藏 目录 Spring 是什么? 什么是 IoC容器? 传统开发模式  loC开发模式 IoC的优势  IoC 的使用 Bean的存储   方法注解  DI  属性注入  构造⽅法注⼊  Setter 注⼊ @Autowired存在的问题  解决方案:

    2024年04月15日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包