Spring依賴注入(DI)的三種方式分別是:
#1、介面注入
2、Setter方法注入
3、建構方法注入
(影片教學推薦:java影片)
#下面來為大家介紹這三種依賴注入在Spring中是怎麼樣實現的。
首先我們需要以下幾個類別:
介面Login.java
介面實作類別LoginImpl.java
一個處理類別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 類型的變數login, 在LoginAction並沒有對login 進行實例化,而只有他對應的setter/getter方法,因為我們這裡使用的是Spring的依賴注入的方式。
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方法注入。
建構方法注入
顧名思義,建構方法注入,就是我們依賴LoginAction的建構方法來達到DI的目的,如下所示:
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>
工作中最常用就是Setter和建構子這兩種注入方法。
推薦教學:java入門程式
以上是Spring依賴注入的三種方式是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!