首頁  >  文章  >  Java  >  Spring依賴注入的三種方式是什麼

Spring依賴注入的三種方式是什麼

王林
王林原創
2020-04-29 13:26:136170瀏覽

Spring依賴注入的三種方式是什麼

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">
<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>

工作中最常用就是Setter和建構子這兩種注入方法。

推薦教學:java入門程式

以上是Spring依賴注入的三種方式是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn