ホームページ  >  記事  >  Java  >  制御の反転と依存関係の注入の違いは何ですか?

制御の反転と依存関係の注入の違いは何ですか?

清浅
清浅オリジナル
2019-04-24 14:44:0221288ブラウズ

制御の反転と依存性の注入の違いは次のとおりです: 依存性の注入はアプリケーションの観点から説明されるのに対し、制御の反転はコンテナの観点から説明されます。制御の反転は原則に焦点を当てますが、依存性はインジェクションは実装に重点を置いています。

制御の反転と依存関係の注入の違いは何ですか?

#【おすすめコース: Java チュートリアル #】

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

IOC 制御の反転 制御の反転

DI 依存関係の注入依存関係の注入

要件 これら 2 つの概念を理解するには、まず次の質問を明確にする必要があります。

参加者は誰ですか?

依存: 誰が誰に依存しているのか?なぜ依存関係が必要なのでしょうか?

注射: 誰が誰に注射するのか?いったい何が注入されるのでしょうか?

制御の反転: 誰が誰を制御するのか?何を制御しますか?なぜそれを反転と呼ぶのでしょうか (反転がある場合は順方向反転があるはずです)。

依存関係の注入と制御の反転は同じ概念ですか?

上記の疑問に簡単に答えてみましょう。これらの疑問が理解できれば、IOC/DI についても理解できるようになります。

(1) 参加者:

通常、3 つの関係者が存在し、1 つは特定のオブジェクト、1 つは IOC/DI コンテナ、もう 1 つは Anオブジェクトの外部リソース。

#オブジェクトとは、通常の Java オブジェクトを指します。

IOC/DI コンテナは、単に IOC/DI 関数の実装に使用されるフレームワーク プログラムを指します。

IOC/DI コンテナの外部リソースオブジェクトとは、オブジェクトが必要とするものを指しますが、これらはオブジェクトの外部から取得されるもので、オブジェクトが必要とする他のオブジェクト、オブジェクトが必要とするファイル リソースなどを総称してリソースと呼びます。

(2) 誰が誰に依存するか:

もちろん、特定のオブジェクトは IOC/DI コンテナに依存します

(3 ) 依存関係が必要な理由:

オブジェクトは、オブジェクトに必要な外部リソースを提供するために IOC/DI コンテナを必要とします

(4) 誰が誰に注入するか:

#IOC/DI コンテナがオブジェクトを注入することは明らかです

##(5) 注入される内容:

##以上です オブジェクトに必要な外部リソースを注入します

(6) 誰が誰を制御するか:


もちろん、それはオブジェクトを制御するIOC/DIコンテナ
(7) 制御内容:

主にオブジェクトインスタンスの作成を制御します

(8) なぜそれがリバースターンと呼ばれるのか:


リバースは正の方向に相対的なものなので、何が正とみなされるのでしょうか?通常の状況でのアプリケーションを考えてみましょう。A の中で C を使用したい場合、どうしますか?もちろん、C のオブジェクトは直接作成されます。つまり、必要な外部リソース C がクラス A で能動的に取得されます。この状況を順方向と呼びます。では、逆とは何でしょうか?つまり、クラス A は積極的に C を取得するのではなく、IOC/DI コンテナが C のインスタンスを取得するのを受動的に待ち、それを逆にクラス A に注入します。
図を使って説明します。まず、図に示すように、IOC/DI がない場合にクラス C を使用する従来のクラス A の回路図を見てみましょう。


##IOC/DI コンテナがある場合、図


に示すように、クラス A は C を積極的に作成しなくなります。受動的に待機し、IOC/DI コンテナが C のインスタンスを取得するのを待ち、図に示すようにそれをクラス A に逆注入します。 (9) 依存関係の注入と制御の反転は同じ概念ですか? 制御の反転と依存関係の注入の違いは何ですか?

上記の説明によると、依存性注入と制御の反転は、同じものを別の角度から説明したものであることがわかります。依存関係の注入はアプリケーションの観点から説明されています。完全な説明は次のとおりです: アプリケーションは必要な外部リソースの作成と注入をコンテナに依存しますが、制御の反転はコンテナの観点から説明されています。完全な説明は次のとおりです:コンテナはアプリケーションを制御し、アプリケーションが必要とする外部リソースをアプリケーションに逆に注入します。

制御の反転と依存関係の注入の違いは何ですか?要約:

実際、IOC/DI がプログラミングにもたらす最大の変化は、コードによるものではなく、思考の観点からのものです。スレーブ転置」という変化が発生しました。アプリケーションは本来、ボスであり、率先してリソースを取得しますが、IOC/DI の考え方では、アプリケーションは受動的になり、IOC/DI コンテナが必要なリソースを作成して注入するのを受動的に待ちます。このような小さな変更は、実際にはプログラミングの考え方における大きな進歩であり、オブジェクトとそれに必要な外部リソースを効果的に分離し、それらを疎結合にし、機能の再利用を促進し、さらに重要なことに、プログラムのシステム全体の構造を非常に大きくします。フレキシブル###

以上が制御の反転と依存関係の注入の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。