控制反转与依赖注入的区别

Dev*_*hal 21 java oop spring design-patterns

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

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

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

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

NG.*_*NG. 17

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

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

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


sam*_*j90 12

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

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

我们有三种类型的依赖注入

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

Spring只支持Constructor Injection和Setter/Getter Injection.

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

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

依赖注入的示例

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

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();
}
Run Code Online (Sandbox Code Playgroud)

使用依赖注入,依赖注入器将为我们取消实例化

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();
}
Run Code Online (Sandbox Code Playgroud)

将控制权交给其他一些(例如容器)进行实例化和注入的上述过程可称为控制反转

您可以在我的答案中阅读有关依赖注入和IOC的更多信息: - 您可以在此处找到概念的优势和应用.

什么是依赖注入?