ホームページ  >  記事  >  Java  >  Spring の依存関係注入の 3 つの方法とは何ですか?

Spring の依存関係注入の 3 つの方法とは何ですか?

王林
王林オリジナル
2020-04-29 13:26:136220ブラウズ

Spring の依存関係注入の 3 つの方法とは何ですか?

#Spring 依存関係注入 (DI) の 3 つのメソッドは次のとおりです:

1、インターフェイス インジェクション

2、Setter メソッド インジェクション

3. コンストラクター メソッド インジェクション

(ビデオ チュートリアルの推奨:

java ビデオ)

これら 3 種類の依存性インジェクションが Spring でどのように機能するかを紹介します。

まず、次のクラスが必要です。

Interface Login.java

インターフェイス実装クラス LoginImpl.java

A 処理クラス LoginAction.java

次のようなテスト クラス TestMain.java

LoginImpl.java もあります。

package com.spring.test.di;

public class LoginImpl implements Login{

public String getName(){

return "fengyun";

}

}

TestMain.java

package com.spring.test.di;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TestMain {

/**

* @param args

*/

public static void main(String[] args) {// 得到ApplicationContext对象

ApplicationContext ctx = new FileSystemXmlApplicationContext(

"applicationContext.xml");

// 得到Bean

LoginAction loginAction = (LoginAction) ctx.getBean("loginAction");

loginAction.execute();

}

}

LoginAction.java は、使用される注入方法によって若干異なります。

インジェクション メソッドに従って LoginAction.java クラスを見てみましょう。

Setter メソッド インジェクション:

package com.spring.test.di;

public class LoginAction {

private Login login;

public void execute() {

String name = login.getName();

System.out.print("My Name Is " + name);

}

/**

* @return the login

*/

public Logic getLogin() {

return login;

}

/**

* @param login

* the login to set

*/

public void setLogin(Login login) {

this.login = login;

}

}

は、ログイン タイプの変数 login を定義します。ここでは Spring の依存関係注入メソッドを使用しているため、LoginAction はログインをインスタンス化せず、対応するセッター/ゲッター メソッドのみをインスタンス化します。

applicationContext.xml 構成ファイルは次のとおりです。

<bean id="login" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<property name="login" ref="login"></property>
</bean>

これで testMain.java を実行できるようになり、My Name Is fengyun がコンソールに表示されることがわかります。

OK、これは Spring の setter メソッドの注入です。

コンストラクター メソッド インジェクション

名前が示すように、コンストラクター メソッド インジェクションは、以下に示すように、DI の目的を達成するために LoginAction のコンストラクター メソッドに依存することを意味します。

LoginAction.java

package com.spring.test.di;

public class LoginAction {

private Login login;

public LoginAction(Login login) {

this.login = login;

}

public void execute() {

String name = login.getName();

System.out.print("My Name Is " + name);

}

}

ここでは、LoginAction コンストラクターを追加しました

applicationContext.xml 構成ファイルは次のとおりです:

<bean id="login" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<constructor­arg index="0" ref="login"></constructor­arg>
</bean>

構成にはconstructorargを使用します。index 属性は、コンストラクター内のパラメーターの順序。複数のパラメーターがある場合は、0,1...

これで testMain.java を実行できるようになり、結果は Setter を使用した場合とまったく同じになります。注入する方法。

注意すべき点は、コンストラクターに複数のパラメーターがある場合 (パラメーター 1、パラメーター 2、パラメーター 2 はパラメーター 1 に依存するなど)、この場合はコンストラクターの順序に注意する必要があります。 、パラメータは 1 がパラメータ 2 の前に配置される必要があります。

一般的には使用しないインターフェイス インジェクションについて話を続けましょう。例として LoginAction を取り上げます。次のように変更しました:

LoginAction.java

package com.spring.test.di;

public class LoginAction {

private Logic login;

public void execute() {

try {

Object obj = Class.forName("com.spring.test.di.LoginImpl")

.newInstance();

login = (Login) obj;

String name = login.getName();

System.out.print("My Name Is " + name);

} catch (Exception e) {

e.printStackTrace();

}

}

}

構成ファイル:

<bean id="logic" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
</bean>

現場で最も一般的に使用される 2 つの注入メソッドは、セッターとコンストラクターです。

推奨チュートリアル:

java エントリー プログラム

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

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