控制反转与dependency injection的区别

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

控制反转是java中用于制作松散耦合且更易于维护的应用程序的技术,并且dependency injection是实现该概念(技术)的方式之一。

控件容器的反转在运行时从java类注入依赖关系以使松散耦合的应用程序。

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

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

DI是IoC的一种forms,其中实现通过构造函数/设置器/服务查找传递到对象,对象将“依赖”以便正确运行。

参考: 控制反转与dependency injection

这些是在java编程中实现松散耦合的模式

DI(dependency injection)
dependency injection是一种模式,用于创建其他对象所依赖的对象实例,而不需要在编译时知道将使用哪个类来提供该function,或者只是将属性注入对象的方式称为dependency injection。

我们有三种类型的dependency injection

  1. 构造函数注入
  2. 塞特/吸气剂注射
  3. 接口注入

Spring将仅支持Constructor Injection和Setter / Getter Injection。

IOC(控制反转):
控制容器以创建和注入应用程序所依赖的对象实例,意味着使用new运算符创建对象,让容器为您执行此操作。 控制反转依赖于dependency injection,因为需要一种机制来激活提供特定function的组件

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

dependency injection的示例

以前我们正在编写这样的代码

 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(); } 

使用dependency injection,dependency injection器将为我们取消实例化

 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(); } 

将控件提供给其他实例(例如容器)以进行实例化和注入的上述过程可称为控制反转

您可以在我的答案中阅读有关dependency injection和IOC的更多信息: – 您可以在此处找到概念的优势和应用。

什么是dependency injection?

控制反转意味着程序将控制委托给将驱动流的其他人IOC(控制反转)是一般的父项,而DI(dependency injection)是IOC的子集。 IOC是一个应用流程被颠倒的概念。 不属于该实体的逻辑控制由其他人采取。 DI提供对象所需的对象。 因此,不是依赖关系构建自己,而是注入它们。 上述方法实现的最大好处是“解耦”,我们可以调用一个对象并传递保持对象独立的任何对象,从而提高可重用性和维护性。

控制反转(IoC)是指一种编程风格,其中框架或运行时控制程序流。 控制反转意味着我们正在从正常方式改变控制。 它适用于依赖倒置原则。

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

IOC代表“控制倒置”。 它将基于IOC原理工作,它意味着协作对象和管理生命周期的对象。协作意味着对象在一个地方组合在一起。 我们可以协作对象是两种方式,它们是依赖性拉取和dependency injection。 DP分为两种方式(Dependency pull和Contextual Dependency pull)和DI也分为两种方式(Setter Injection和Constructor Injection).IOC支持两种方式但是,Spring框架工作的主要意图是我们的组件将完全松散再加。 如果我们将使用Dependency pull,我们的组件类将与另一个类紧密耦合,即使作为弹簧框架工作的一部分。然后建议去dependency injection(Setter Injection或Constructor Injection)。 IOC和DI之间没有区别.IOC不同,DI不同,DI是IOC的一部分。

控制和dependency injection的反转是Spring框架的核心设计模式。 IOC和DI设计模式也是Java中流行的设计模式访谈问题。 正如名称所示,控制模式的反转意味着管理对象生命周期的责任,例如创建一个对象,从应用程序到框架设置它们的依赖性等,这使得编写Java应用程序变得更加容易。

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