私たちが日常的にプログラミング言語を扱っている世界では、私たち全員が私たちの生活を楽にするための方法やトリックを探す傾向があります。まあ、依存性注入は、別のオブジェクトの依存性を提供することによって開発者のコードを簡単に支援することを目的としたそのような手法の1つです。依存性注入とは何かに関するこの記事では、この手法を詳細に理解するのに役立ちます。
この記事では、次のトピックについて説明します。
それでは、この記事から始めましょう。
依存性注入とは何ですか?
依存性注入は、別のオブジェクトの依存性を提供するオブジェクトの機能です。
さて、あなたは上記の技術的な定義では何も理解していないかもしれません。だから、私はあなたのために混乱をクリアさせてください。
依存関係という用語を聞いたとき、何が思い浮かびますか?
明らかに、サポートのために何か他のものに依存しているものは正しいですか?
ええと、プログラミングの場合も同じです。
プログラミングの依存関係は、クラスが別のクラスの特定の機能を使用するアプローチです。したがって、たとえば、2つのクラスAとBを検討し、クラスAがクラスBの機能を使用すると言う場合、クラスAにはクラスBの依存関係があることを意味します。ここで、Javaでコーディングしている場合は、次のことを知っておく必要があります。それ、あなたはしなければなりませんオブジェクトがクラスAによって使用される前に、クラスBのインスタンスを作成します。
したがって、依存性注入を定義する必要がある場合、他のクラスのオブジェクトを作成し、依存性を直接使用してクラスを許可するプロセスは、依存性注入と呼ばれます。。主に3つのクラスが関係しています。
クライアントクラス: これは依存クラスであり、Serviceクラスに依存しています。
サービスクラス: このクラスは、クライアントクラスにサービスを提供します。
インジェクタークラス: このクラスは、サービスクラスオブジェクトをクライアントクラスに挿入する役割を果たします。
これで、依存性注入とは何かを理解したので、次に、依存性注入の基礎となる原則について説明します。
制御の反転
上で述べたように、制御の反転はそれに基づいた原則であり、依存性注入が行われます。また、名前が示すように、制御の反転は基本的に、主な責任ではなく、クラスのさまざまな種類の追加の責任を反転するために使用されます。
もっと簡単に説明する必要がある場合は、料理をする能力がある例を考えてみましょう。 IoCの原則によれば、制御を反転できるため、料理を調理する代わりに、外部から直接注文することができ、玄関先で料理を受け取ることができます。したがって、あなたの玄関先であなたに届けられる食物のプロセスは、制御の反転と呼ばれます。
自分で料理する必要はありません。代わりに、食べ物を注文して配達担当者に配達してもらうことができます。このように、あなたは追加の責任の世話をする必要はなく、ただ主な仕事に集中する必要があります。
依存性注入の背後にある原理を理解したところで、依存性注入の種類について説明します。
依存性注入の種類
依存性注入には主に3つのタイプがあります。
コンストラクター注入: このタイプのインジェクションでは、インジェクターはクライアントクラスコンストラクターを介して依存関係を提供します。
セッターインジェクション/プロパティインジェクション: このタイプのインジェクションでは、インジェクターメソッドは、クライアントによって公開されたセッターメソッドへの依存関係をインジェクトします。
インターフェイスインジェクション: このタイプのインジェクションでは、インジェクターはインターフェイスを使用してクライアントクラスへの依存関係を提供します。クライアントは、を公開するインターフェイスを実装する必要がありますセッター方式これ依存関係を受け入れます。
これまで、依存性注入がオブジェクトの作成を担当し、どのクラスがそれらのオブジェクトを必要とするかを理解し、最後にそれらのクラスにオブジェクトを提供するという事実を理解していただければ幸いです。したがって、その点について、次に依存性注入の利点を調べてみましょう。
依存性注入の利点
依存性注入の利点をリストアップする前に、この注入の必要性を業界レベルで説明し、利点をよりよく理解できるようにします。
受信した電子メールの処理を唯一の責任とする電子メールクラスがあるシナリオを考えてみます。これで、このクラスには、「To email address」、「From email address」、「Subject and the Body oftheemail」などのオブジェクトが含まれるようになります。
さて、会社がテキストとオーディオメッセージを保存したい場合、このクラスはメッセージを保存できると思いますか?
さて、答えはノーですか?
これは、Eメールクラスがテキストと音声メッセージのパラメータを処理できないためです。このような場合、クラスを再作成する必要があります。現在、クラスの再作成は、特に定期的に行う必要がある場合は、非常に面倒な作業です。代わりに、依存性注入を使用する場合は、実行時にオブジェクトを変更できます。したがって、この方法では、クラスを再作成する必要がなく、多くの点でさらに役立ちます。
したがって、依存性注入の利点を要約する必要がある場合、次の利点があります。
さて、依存性注入の利点がわかったところで、次に進み、SpringBootを使用して依存性注入を実装する方法を見てみましょう。
Spring Bootを使用してDIを実装する方法は?
ステップ1: あなたの Eclipse IDE を作成します SpringBootアプリケーション 右クリックして選択する 春のスタータープロジェクト 。次に、プロジェクトの名前を指定して、をクリックします 終了 。
Spring Starter Projectを入手するには、EclipseMarketplaceからSpringToolSuiteをインストールする必要があります。 Spring Too Suiteがインストールされていない場合は、に関する私の記事を参照してください。 。
以下のようにアプリケーションファイルが作成されていることが自動的にわかります。
ステップ2: 次に、同じパッケージにクラスを作成します。これを行うには、ファイルを右クリックして->を選択します クラス と言及する クラス名。 次に、をクリックします 終了 。これにより、 クラス ファイル。ここでは、Customersクラスを作成しました。以下を参照してください。
ステップ3: その後、クラスのいくつかのプロパティを入力しましょう。だから、私たちが含めるとしましょう 顧客ID、顧客名 そして コース名。 以下のコードに言及してください。
package com.example.demo //パッケージ名publicclass Customers {private int custid private String custname private Stringcoursename}
ステップ3.1: それが終わったら、あなたはしなければなりません GetterメソッドとSetterメソッドを生成する これらのプロパティについて。これを行うには、これらのプロパティを選択して右クリックします。次に、 ソース -> GetterメソッドとSetterメソッドを生成します。
これまでのコードは次のようになります。
パッケージcom.example.demopublic class Customers {private int custid private String custname private Stringcoursename public int getCustid(){return custid} public void setCustid(int custid){this.custid = custid} public String getCustname(){return custname } public void setCustname(String custname){this.custname = custname} public String getCoursename(){returncoursename} public void setCoursename(Stringcoursename){this.coursename = coursename}}
ここで、Customersのオブジェクトを作成する必要があり、手動で作成したくないシナリオを考えてみます。このようなシナリオでは、依存性注入を使用して、必要なときにいつでもオブジェクトを取得する必要があります。
それでは、次に、同じことをどのように達成できるかを見てみましょう。
ステップ4: まず、 実行ライン の中に アプリケーションクラスファイル 以下に:
ConfigurableApplicationContextコンテキスト= SpringApplication.run(DemoApplication.class、args)
注:エラーが発生した場合は、以下をインポートしてください。
import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext
上記のコード行は、実行時にオブジェクトを返します。次に、次のコードをアプリケーションファイルに追加します。
顧客c = context.getBean(customers.class)
上記の行は、customerクラスのオブジェクトを返すようにコンパイラーに指示します。以下を参照してください。
ステップ4.1: さて、それが機能しているかどうかを確認するために、あなたは Customerクラスに戻ることができます 次のようにメソッドを追加します。
public void display(){System.out.println( 'オブジェクトが正常に返されました')}
このメソッドは、正常に実行されると「オブジェクトが正常に返されました」という出力を表示します。
ステップ4.2: 次に、アプリケーションファイルに戻って、次のことを説明する必要があります。
c.display()
これにより、displayメソッドの参照を使用してCustomersクラスのオブジェクトを呼び出すことになります。これまでのApplicationクラスのコードについては、以下の画像を参照してください。
これで、プロジェクトを実行すると、 タイプの適格なBeanがないことを除いて 。 これは、定義した顧客クラスがSpring Beanではない、つまりSpringオブジェクトではないためです。 以下を参照してください。
フィボナッチc ++再帰
ステップ4.3: したがって、Spring Containerにそのことを伝えるには、customerクラスのオブジェクトが必要です。そのためには、 @Componentアノテーション 、Customerクラス。 Customersクラスのコードは次のようになります。
package com.example.demo import org.springframework.stereotype.Component @Component public class Customers {private int custid private String custname private Stringcoursename public int getCustid(){return custid} public void setCustid(int custid){this.custid = custid} public String getCustname(){return custname} public void setCustname(String custname){this.custname = custname} public String getCoursename(){returncoursename} public void setCoursename(Stringcoursename){this.coursename = coursename} public void display(){System.out.println( 'オブジェクトが正常に返されました')}}
次に、顧客について言及するとき c = context.getBean(customers.class) コンパイラーは、コンテナーで使用可能なカスタマーBeanがあるかどうかを確認します。
Beanが使用可能な場合、Springフレームワークはアプリケーションに顧客オブジェクトを注入しています。したがって、基本的に、このオブジェクトはSpringフレームワークによって作成され、アプリケーションでさらに使用できます。
したがって、このプロジェクトを今実行すると、オブジェクトが正常に返されたという出力が表示されます。以下を参照してください。
これは基本的に、依存性注入を実装する方法です。
例:自動有線アノテーションを使用した依存性注入
SpringBootで依存性注入がどのように機能するかを理解していただければ幸いです。ここで、この例を拡張して、他のクラスに依存するクラスがSpringBootでそのクラスの機能をどのように使用したかをさらに見てみましょう。
ステップ1: 新しいを作成します クラスファイル 、再び パッケージを右クリック そして選択することによって 新規->クラス。 次に、クラスの名前を以下のように記述して、をクリックします 終了します。
ステップ2: 次に、クラスのいくつかのプロパティを入力しましょう。だから、私たちが含めるとしましょう TechID、Techname。 以下のコードに言及してください。
パッケージcom.example.demopublic class Technologies {private int techid private String techname}
ステップ2.1: それが終わったら、生成します ゲッターとセッターのメソッド これらのプロパティについては、ファイルを右クリックして、 ソース->ゲッターメソッドとセッターメソッドを生成します。
ステップ3: ここで、「」を出力するメソッドを作成する必要があるとしましょう。 成功 「。それを行うには、コードに言及します。
public void tech(){System.out.println( '成功')}
これまでのコードは次のようになります。
パッケージcom.example.demopublic class Technologies {private int techid private String techname public int getTechid(){return techid} public void setTechid(int techid){this.techid = techid} public String getTechname(){return techname} public void setTechname(String techname){this.techname = techname} public void tech(){System.out.println( 'Successful')}}
ステップ4: さて、 tech()メソッド の中に 顧客クラス 、technologiesクラスのオブジェクトを作成する必要があります。したがって、customersクラスの次のコード行に言及します。
プライベートテクノロジーtechdetail
ステップ4.1: それが終わったら、生成します ゲッターとセッターのメソッド これらのプロパティについて ファイルを右クリック 次に選択します ソース->ゲッターメソッドとセッターメソッドを生成します。
ステップ5: 次に、を使用するには tech()メソッド 、あなたは言及する必要があります techdetail.tech() 下 顧客クラスの表示メソッド 。また、techdetailオブジェクトがインスタンス化されていることを確認するために言及 @Componentアノテーション それは テクノロジークラス。 以下を参照してください。
これで、このプロジェクトを実行すると、 ヌルポインタの例外 。これは、今では CustomerクラスはTechnologiesクラスに依存していますが、Technologiesクラスの存在を認識していません。 。
したがって、お客様がTechnologiesクラスを認識できるようにするには、 @Autowiredアノテーション Customersクラスで。 Customersクラスの最終的なコードは次のようになります。
パッケージcom.example.demoimport org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Customers {private int custid private String custname private Stringcoursename @Autowired private Technologies techdetail public Technologies getTechdetail( ){return techdetail} public void setTechdetail(Technologies techdetail){this.techdetail = techdetail} public int getCustid(){return custid} public void setCustid(int custid){this.custid = custid} public String getCustname(){return custname } public void setCustname(String custname){this.custname = custname} public String getCoursename(){returncoursename} public void setCoursename(Stringcoursename){this.coursename = coursename} public void display(){System.out.println( 'オブジェクトが正常に返されました')techdetail.tech()}}
これらのファイルを実行すると、出力が「オブジェクトが正常に返されました」および「成功」として表示されます。これは、クラスの依存関係が満たされていることを意味します。以下を参照してください。
記事が完成したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。
質問がありますか?この「依存性注入とは何ですか?」のコメントセクションでそれについて言及してください。 ' 論文 できるだけ早くご連絡いたします。