web-dev-qa-db-ja.com

制御の反転と依存性注入の違い

IoCとDIの概念は私にとって非常に紛らわしいので、さまざまな人の多くの意見と投稿を読んで、最終的に結論に達しました。だからこれらのトピックは...

制御の反転は、Javaで疎結合で保守が容易なアプリケーションを作成するための手法であり、依存性注入はこの概念を達成する方法の1つです(手法)。

コントロールコンテナの反転は、実行時にJavaクラスから依存関係を注入し、疎結合アプリケーションを作成します。

これは本当ですか ?私が間違っている場合は修正してください...

21
Devendra Anchal

IoCは、アプリケーションがフレームワークのメソッドを呼び出すのではなく、アプリケーションが提供する実装をフレームワークが呼び出すことを意味する一般的な用語です。

DIはIoCの形式であり、コンストラクター/セッター/サービスルックアップを介して実装がオブジェクトに渡され、オブジェクトは正しく動作するために「依存」します。

参照: 制御の反転と依存性注入

17
NG.

これらはJavaプログラミングで疎結合を達成するためのパターンです

DI(依存性注入)
依存性注入は、コンパイル時に他のオブジェクトが依存するオブジェクトのインスタンスを作成するために使用されるパターンです。どのクラスを使用してその機能を提供するか、オブジェクトに単にプロパティを注入する方法を依存性注入と呼びます。

3種類の依存性注入があります

  1. コンストラクター注入
  2. セッター/ゲッターインジェクション
  3. インターフェース注入

Springは、コンストラクター注入とセッター/ゲッター注入のみをサポートします。

IOC(制御の反転):
アプリケーションに依存するオブジェクトのインスタンスを作成して注入するためにコンテナに制御を与えると、new演算子を使用してオブジェクトを作成する代わりに、コンテナにそれを行わせることができます。制御の反転は、特定の機能を提供するコンポーネントをアクティブにするためのメカニズムが必要なため、依存性注入に依存しています

2つの概念はこのように連携して機能し、より柔軟で再利用可能なカプセル化されたコードを記述できます。そのため、これらはオブジェクト指向ソリューションの設計における重要な概念です。

依存性注入の例

以前は、このようなコードを書いていました

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

依存性注入では、依存性インジェクターがインスタンス化を解除します

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

インスタンス化とインジェクションのために他のいくつかのコントロール(コンテナなど)に制御を渡す上記のプロセスは、Inversion of Controlと呼ぶことができます。

依存性注入の詳細とIOCを私の答えで読むことができます:-ここで概念の利点と応用を見つけることができます。

依存性注入とは?

11
Samuel J Mathew

制御の反転とは、プログラムがフローを駆動する他の誰かに制御を委任することを意味しますIOC(制御の反転)は一般的な親用語であり、DI(依存性注入)はIOCのサブセットです。 IOCは、アプリケーションのフローが反転する概念です。そのエンティティの一部ではないロジックの制御は、他の誰かによって行われます。 DIは、オブジェクトが必要とするオブジェクトを提供します。したがって、依存関係自体が構築されるのではなく、注入されます。上記のアプローチによって達成される最大の利点は「デカップリング」です。オブジェクトを呼び出して、オブジェクトを独立させてオブジェクトを渡すことができるため、再利用性とメンテナンスが向上します。

1
Nico

IOCは「Inversion of Control」の略です。 IOC原則に基づいて動作します。これは、オブジェクトのコラボレーションとライフサイクルのオブジェクトの管理を意味します。コラボレーションとは、オブジェクトが1か所でグループ化されることを意味します。 DPは2つの方法(Dependency PullとContextual Dependency Pull)に分けられ、DIも2つの方法(Setter InjectionとConstructor Injection)に分けられています。IOCは両方の方法をサポートしていますが、春のフレームワークの主な意図依存関係プルを使用する場合、コンポーネントフレームは、スプリングフレームの一部としても、別のクラスと密結合します。その後、依存関係の注入(セッターインジェクションまたはコンストラクターインジェクション)が推奨されます。 。IOCとDI.IOCは異なり、DIは異なります。DIはIOCの一部の1つです。

0
user8293791

Inversion of Control and 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

0

Inversion of Control(IoC)は、フレームワークまたはランタイムがプログラムフローを制御するプログラミングスタイルを指します。コントロールの反転とは、コントロールを通常の方法から変更していることを意味します。 Dependency Inversion Principleで機能します。

DIは、疎結合コードの開発を可能にするソフトウェア設計パターンです。 DIは、ソフトウェアコンポーネント間の密結合を減らす優れた方法です。また、DIにより、ソフトウェアの将来の変更やその他の複雑さをより適切に管理できます。 DIの目的は、コードを保守可能にすることです。

0
Adi Sembiring