zoukankan      html  css  js  c++  java
  • 谈谈你对Spring IOC和DI的理解,以及它们的区别

    谈谈你对Spring IOC 和 DI的理解,以及它们有什么区别?

      IOC是什么?

        IOC--Inversion of Control,即控制反转,不是什么技术,而是一种设计思想.IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.

      IOC的优势是什么?

        IOC是一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合,更优良的程序,传统的应用程序都是由我们在类的内部主动创建依赖对象,从而导致类与类之间的高耦合,有了IOC容器之后,把创建和查找依赖对象的控制权交给了IOC容器,由容器进行注入组合对象,所以对象和对象之间是松耦合的.

      DI是什么?

        DI--Dependency Injection,即依赖注入,组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件当中,依赖注入的目的并非为软件系统带来更多的功能,而是为了提升组件重复使用的频率,并为系统搭建一个灵活可扩展的平台,通过依赖注入我们只需要使用简单的配置,而不需要任何代码就可以指定目标需要的资源,完成业务逻辑,而不需要关心具体的资源来自何处,由谁实现的.

      IOC--控制反转的通俗解释:

        所谓的IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西给你,同时也把你交给其他需要你的东西,所有的类的创建,销毁都是由spring来控制,也就是说控制对象的生命周期不再是引用它的对象,而是spring,对于某个具体的对象而言,以前是它控制其他对象,而现在所有的对象都由spring控制,所以这就叫控制反转.

      DI--依赖注入的通俗理解:

        如果程序中A需要依赖B才能正常进行,而这时候B不是自己创建的而是由spring容器注入给A的,spring会在适当的时候创建B,然后像打针一样注入给A,所以依赖注入的名字就是这么来的.那么DI是如何实现的呢?Java 1.3之后一个重要的特征就是反射(reflection),它允许程序在运行的时候动态的生成对象,执行对象的方法,改变对象的属性,spring就是通过反射来注入的.

      谁依赖了谁?当然是应用程序依赖于IOC容器;

      为什么需要依赖?应用程序需要IOC容器来提供对象需要的外部资源;

      谁注入谁?IOC容器注入应用程序某个对象,应用程序依赖的对象;

      注入了什么?注入某个对象所需要的外部资源(包括对象,资源,常亮数据);

      IOC和DI有什么关系?

        其实它们是同一个概念的不同角度的描述.

  • 相关阅读:
    再不迁移到Material Design Components 就out啦
    Material Design Compoents 1.1.0
    Android低功耗蓝牙总结
    JAVA8 对象排序
    记录UIButton 自适应的一个坑
    MySQL 索引大全
    MySQL 与 MongoDB 的区别
    Flutter https://flutter.cn/docs学习之添加资源和图片
    Flutter https://flutter.cn/docs学习之加入交互体验
    Flutter https://flutter.cn/docs学习之向 Android 应用中添加闪屏页和启动页
  • 原文地址:https://www.cnblogs.com/wk-missQ1/p/12547397.html
Copyright © 2011-2022 走看看