关于java:控制反转的区别&

Difference between Inversion of Control & Dependency Injection

本问题已经有最佳答案,请猛点这里访问。

IOC和DI的概念对我来说非常混乱,所以我读了很多不同的人的观点和文章,最后得出了结论。据我所知,这些主题是…

控制反转是Java中用于松散耦合和更容易维护的应用的一种技术,依赖注入是实现这一概念(技术)的途径之一。

控制容器的反转在运行时从Java类中注入依赖关系,从而形成松散耦合的应用程序。

这是真的吗?如果我错了请纠正我…


IOC是一个通用术语,它的含义不是让应用程序调用框架中的方法,而是调用应用程序提供的实现。

DI是IOC的一种形式,实现通过构造器/设置器/服务查找传递到对象中,对象将"依赖"该查询以正确地行为。

参考文献:控制反转与依赖注入


这些是Java编程中实现松耦合的模式。

DI(依赖注入):依赖注入是用于创建对象实例的模式其他对象在编译时不知道所依赖的哪个类将用于提供该功能或简单地向对象注入属性的方法称为依赖注入。

我们有三种依赖注入

  • 构造器注入
  • 塞特/吸气剂注入
  • 界面注入
  • Spring只支持构造函数注入和setter/getter注入。

    IOC(控制权倒置):控制容器以创建和注入应用程序所依赖的对象的实例,意味着不用使用new操作符来创建对象,而是让容器为您创建对象。控制反转依赖依赖于依赖注入,因为需要一种机制来激活提供特定功能的组件。

    这两个概念以这种方式协同工作,以允许编写更灵活、可重用和封装的代码。因此,它们是面向对象解决方案设计中的重要概念。

    依赖注入示例

    以前我们写这样的代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public MyClass{
     DependentClass dependentObject
     /*
      At somewhere in our code we need to instantiate
      the object with new operator  inorder to use it or perform some method.
      */

      dependentObject= new DependentClass();
      dependentObject.someMethod();
    }

    通过依赖注入,依赖注入器将为我们除去实例化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public MyClass{
     /* Dependency injector will instantiate object*/
     DependentClass dependentObject

     /*
      At somewhere in our code we perform some method.
      The process of  instantiation will be handled by the dependency injector
     */


      dependentObject.someMethod();
    }

    将控制权交给其他人(例如容器)进行实例化和注入的上述过程可以称为控制权倒置。

    您可以在我的答案中阅读更多关于依赖注入和IOC的内容:-您可以在这里找到这些概念的优势和应用。

    什么是依赖注入?


    反向控制意味着程序将控制权委托给其他人,这些人将驱动流IOC(反向控制),这是一个通用的父术语,而DI(依赖注入)是IOC的一个子集。IOC是一个应用程序流程颠倒的概念。不属于该实体的逻辑的控制权由其他人承担。DI提供对象需要的对象。因此,它们不是依赖项本身构造的,而是注入的。上述方法最大的好处是"去耦",我们可以调用一个对象并传递任何保持对象独立的对象,从而提高可重用性和维护性。


    控制反转和依赖注入是Spring框架的核心设计模式。IOC和DI设计模式也是Java中一种流行的设计模式面试问题。顾名思义,反转控制模式反转了管理对象生命周期的责任,例如创建对象、将依赖性等从应用程序设置到框架,这使得编写Java应用程序变得更加容易。

    阅读更多:http://javarevisited.blogspot.com/2012/12/inversion of control dependency injection design pattern spring example tutorial.html ixzz4xve86ppn


    国际奥委会代表"控制权倒置"。它将根据国际奥委会的原则工作,它意味着合作对象和管理生命周期的对象,合作意味着对象在一个地方被分组在一起。我们可以通过依赖拉和依赖注入两种方式来协作对象。dp分为两种方式(依赖拉和上下文依赖拉),di也分为两种方式(setter注入和构造器注入),ioc支持这两种方式,但spring框架工作的主要目的是我们的组件将完全松散耦合。如果我们将使用依赖拉,那么我们的组件类将与另一个类紧密耦合,即使是作为Spring框架工作的一部分,那么建议进行依赖注入(setter注入或构造函数注入)。国际奥委会和DI之间没有区别,IOC不同,DI不同,DI是IOC的一部分。


    控制反转(IOC)是指框架或运行时控制程序流的编程风格。控制反转意味着我们正从正常的方式改变控制。它基于依赖倒置原理。

    DI是一种软件设计模式,允许我们开发松散耦合的代码。DI是减少软件组件之间紧密耦合的一个好方法。DI还使我们能够更好地管理未来的变更和软件中的其他复杂性。DI的目的是使代码可维护。