如何通俗易懂的解释“依赖注入”?另外,依赖注入和控制反转有区别吗?具体是什么区别?
ringa_lee
書かれたものはすぐに使えます!
まず、依存とは何ですか? たとえば、 var d=new Date(); は、d が Date オブジェクトの作成に依存することを意味します。いいえ プログラムの結合度を低くするには、コンポーネント間の相互依存と制約を最小限に抑える方が良いです。たとえば、コンストラクターが他の人によって作成された場合、再度作成せずに直接呼び出すことができます。 第三に、注射とは何ですか?それは、私が今使っているものは他人から与えられ、受動的に作られたものであるということです。たとえば リーリー
違いはなく、角度が違うだけで、すべて同じものを指します。簡単に言うと、自分でオブジェクトを作成する必要はありません。Spring が必要な場所にオブジェクトを配置するのに役立ちます
全てファクトリーモデルを昇華させたものです。 依存性注入と制御コードの反転の原則は同じものですが、理解が異なるだけです。 これらの名詞は実際には、基本的なオブジェクト指向アプリケーションにすぎず、多くの友人を混乱させています。 これは戦略パターンと工場パターンと同じです。
次を参照してください: http://www.nowcoder.com/questionterminal/3be16186465a453f876729acd2e46ddf
依存関係の注入と制御の反転の間には本質的に違いはありませんが、問題を説明する観点が異なります。
制御の反転: 反転とは正確には何ですか? Wikipedia の定義は、依存オブジェクトの取得が反転されることです。 アプリケーションは通常、多くのオブジェクトで構成されます。他の多くのクラスを 1 つのクラスで使用する必要があります。最初は、新しいキーワードを通じて他のクラスのインスタンスを取得することにしました。このため、各クラスの呼び出し関係が結合してしまうという問題が発生します。 制御の反転を使用すると、Spring がクラスのインスタンスを注入するのを受動的に待つだけでよく、それを直接使用できます。
これには、オブジェクトの一元管理、多くのシングルトンを自分で実装する必要がない、クラスの呼び出し関係を切り離すなど、多くの利点があります。 2 つのクラス A と B があるとします。 A で
spring は IoC と AOP に基づいて構築されています。 new B()
new B()
データベースクラス db があり、データベース接続オブジェクトを取得できる静的メソッド get_db() があります。データベースを操作する必要があるクラス post もあり、メソッド get_post があります() はデータベースにクエリを実行する必要があります。# 🎜🎜#データベース接続はパブリック操作であるため、結合を避けるために post クラスは内部的にデータベースに再度接続することを望んでいません。したがって、post クラスは set_db( #🎜 🎜#db::get_db() を post クラスの set_db() メソッドのパラメータとして post クラス内に渡す #🎜🎜 ) メソッドを使用してデータベース接続オブジェクトを取得します。 # リーリー 以下の書き方を比較すると、依存性注入は実際には完全にOOPである一部の言語のパッチであることがわかります。 リーリー
書かれたものはすぐに使えます!
まず、依存とは何ですか? たとえば、 var d=new Date(); は、d が Date オブジェクトの作成に依存することを意味します。いいえ プログラムの結合度を低くするには、コンポーネント間の相互依存と制約を最小限に抑える方が良いです。たとえば、コンストラクターが他の人によって作成された場合、再度作成せずに直接呼び出すことができます。
第三に、注射とは何ですか?それは、私が今使っているものは他人から与えられ、受動的に作られたものであるということです。たとえば
リーリー
違いはなく、角度が違うだけで、すべて同じものを指します。簡単に言うと、自分でオブジェクトを作成する必要はありません。Spring が必要な場所にオブジェクトを配置するのに役立ちます
全てファクトリーモデルを昇華させたものです。
依存性注入と制御コードの反転の原則は同じものですが、理解が異なるだけです。
これらの名詞は実際には、基本的なオブジェクト指向アプリケーションにすぎず、多くの友人を混乱させています。
これは戦略パターンと工場パターンと同じです。
次を参照してください: http://www.nowcoder.com/questionterminal/3be16186465a453f876729acd2e46ddf
依存関係の注入と制御の反転の間には本質的に違いはありませんが、問題を説明する観点が異なります。
制御の反転:
反転とは正確には何ですか? Wikipedia の定義は、依存オブジェクトの取得が反転されることです。
アプリケーションは通常、多くのオブジェクトで構成されます。他の多くのクラスを 1 つのクラスで使用する必要があります。最初は、新しいキーワードを通じて他のクラスのインスタンスを取得することにしました。このため、各クラスの呼び出し関係が結合してしまうという問題が発生します。 制御の反転を使用すると、Spring がクラスのインスタンスを注入するのを受動的に待つだけでよく、それを直接使用できます。
これには、オブジェクトの一元管理、多くのシングルトンを自分で実装する必要がない、クラスの呼び出し関係を切り離すなど、多くの利点があります。 2 つのクラス A と B があるとします。 A で
のようなステートメントが使用されている場合は、B から A に有向辺を追加します。大規模なプロジェクトには何千ものクラスが含まれる可能性があり、この方法で形成された有向グラフは間違いなく非常に複雑になります。制御の反転が使用される場合、最も極端なケースでは、すべてのクラスが独立した点になります。spring は IoC と AOP に基づいて構築されています。
new B()
データベースクラス db があり、データベース接続オブジェクトを取得できる静的メソッド get_db() があります。
データベースを操作する必要があるクラス post もあり、メソッド get_post があります() はデータベースにクエリを実行する必要があります。# 🎜🎜#データベース接続はパブリック操作であるため、結合を避けるために post クラスは内部的にデータベースに再度接続することを望んでいません。
したがって、post クラスは set_db( #🎜 🎜#db::get_db() を post クラスの set_db() メソッドのパラメータとして post クラス内に渡す #🎜🎜 ) メソッドを使用してデータベース接続オブジェクトを取得します。 # リーリー
以下の書き方を比較すると、依存性注入は実際には完全にOOPである一部の言語のパッチであることがわかります。
リーリー