検索
ホームページJava&#&チュートリアル制御の反転と依存関係の注入の違いは何ですか?

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

Apr 24, 2019 pm 02:44 PM
依存性注入制御の反転

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

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

#【おすすめコース: 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 までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール