web-dev-qa-db-ja.com

Javaのリソース注入と依存性注入(CDI)の違いは何ですか?

私はしばらくの間Java EEを学び、発見したJava EEは2種類の注入メカニズムを提供します

  1. リソースインジェクション
  2. 依存性注入

リソース注入と依存性注入の違いを理解するために私を導いてください。

22
user4867774

Java EEは、オブジェクトがリソースやその他の依存関係への参照を直接インスタンス化することなく(明示的に「new」キーワードを使用して)取得できるようにするインジェクションメカニズムを提供します。コンパイラへの注入ポイントを示すアノテーションを使用してフィールドまたはメソッドを描画することにより、クラスで必要なリソースとその他の依存関係を宣言するだけです。

コンテナは、実行時に必要なインスタンスを提供します。インジェクションの利点は、コードを簡素化し、依存関係の実装から切り離すことです。

どちらの方法でも、制御の反転の実現が容易になります。

私がこれについて書いた私の記事の1つを見てください。

7
Lalit Rao

ソース から:

リソースインジェクションを使用すると、JNDI名前空間で使用可能なリソースを、サーブレット、エンタープライズBean、マネージドなどのコンテナ管理対象オブジェクトにインジェクトでき​​ます。豆。たとえば、リソースインジェクションを使用して、データソース、コネクタ、またはJNDI名前空間で使用可能なその他の必要なリソースをインジェクトでき​​ます。

依存性注入を使用すると、通常のJavaクラスを管理対象オブジェクトに変換し、他の管理対象オブジェクト(オブジェクト)に注入できます。コンテナによって管理されます)。

リソース注入と依存性注入の違いRIとDIの違いを以下に示します。

  1. リソースインジェクションはJNDIリソースを直接注入できますが、依存性注入はできません。

  2. 依存性注入は通常のクラス(マネージドBean)を直接注入できますが、リソース注入はできません。

  3. リソースインジェクションはリソース名で解決されますが、DependencyInjectinはタイプで解決されます。

  4. 依存性注入はタイプセーフですが、リソース注入はタイプセーフではありません。

25
Rahul Tripathi
7
CDT

Rahul Tripathiの答えは正確で、正しいものです。しかし、どちらを使用するかを決定するのに役立つより簡潔な方法で言えば、次のように見てみましょう。DIは通常、実装クラスをインターフェイスに割り当てるために使用されます。一方、RIは、JNDIからプロパティ値とJDBC接続を抽出するために使用されます。 DIを使用すると、インターフェイスに対してコードを記述し、後で使用する実装を決定できます。通常、RIされたオブジェクトが単なるプロパティ値ではなく、DIを使用してプロパティ値を渡す場合は、いくつかの重複があります。すでに述べたように、この重複の良い例はJDBC接続です。 JDBC接続は、接続文字列(プロパティ値)であるだけでなく、実装(使用するドライバー)でもあります。

DIを使用していて、プロパティ値を渡す必要がある場合は、引き続きDIを使用すると思います。また、RIを使用していてオブジェクトを渡す必要がある場合は、可能であればRIで渡すだけではありません。最終的に両方を使用する場合は、入力する必要のあるXMLファイルが増えます。

4
Jose Martinez