java ビデオ)
これら 3 種類の依存性インジェクションが Spring でどのように機能するかを紹介します。 まず、次のクラスが必要です。 Interface Login.javaインターフェイス実装クラス LoginImpl.javaA 処理クラス LoginAction.java次のようなテスト クラス TestMain.javaLoginImpl.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"> <constructorarg index="0" ref="login"></constructorarg> </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 つの注入メソッドは、セッターとコンストラクターです。 推奨チュートリアル:
以上がSpring の依存関係注入の 3 つの方法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。