Spring依賴注入的三種方式實(shí)例詳解
Spring依賴注入(DI)的三種方式,分別為:
1. 接口注入
2. Setter方法注入
3. 構(gòu)造方法注入
下面介紹一下這三種依賴注入在Spring中是怎么樣實(shí)現(xiàn)的。
首先我們需要以下幾個(gè)類:
接口 Logic.java
接口實(shí)現(xiàn)類 LogicImpl.java
一個(gè)處理類 LoginAction.java
還有一個(gè)測(cè)試類 TestMain.java
Logic.java如下:
package com.spring.test.di;
public interface Logic {
public String getName();
}
LogicImpl.java如下:
package com.spring.test.di;
public class LogicImpl implements Logic{
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對(duì)象
ApplicationContext ctx = new FileSystemXmlApplicationContext(
"applicationContext.xml");
// 得到Bean
LoginAction loginAction = (LoginAction) ctx.getBean("loginAction");
loginAction.execute();
}
}
LoginAction.java 會(huì)根據(jù)使用不同的注入方法而稍有不同
下面按照注入的方法來(lái)看LoginAction.java類
Setter方法注入:
package com.spring.test.di;
public class LoginAction {
private Logic logic;
public void execute() {
String name = logic.getName();
System.out.print("My Name Is " + name);
}
/**
* @return the logic
*/
public Logic getLogic() {
return logic;
}
/**
* @param logic
* the logic to set
*/
public void setLogic(Logic logic) {
this.logic = logic;
}
}
定義了一個(gè)Logic 類型的變量 logic, 在LoginAction并沒(méi)有對(duì)logic 進(jìn)行實(shí)例化,而只有他對(duì)應(yīng)的setter/getter方法,因?yàn)槲覀冞@里使用的是Spring的依賴注入的方式
applicationContext.xml配置文件如下:
現(xiàn)在可以運(yùn)行testMain.java了,我們可以看到控制臺(tái)打出了 My Name Is fengyun
OK了,這就是spring的setter方法注入,非常簡(jiǎn)單
下面我們來(lái)看看構(gòu)造方法注入
顧名思義,構(gòu)造方法注入,就是我們依靠LoginAction的構(gòu)造方法來(lái)達(dá)到DI的目的,如下所示:
LoginAction.java
package com.spring.test.di;
public class LoginAction {
private Logic logic;
public LoginAction(Logic logic) {
this.logic = logic;
}
public void execute() {
String name = logic.getName();
System.out.print("My Name Is " + name);
}
}
這里我們添加了一個(gè)LoginAction的構(gòu)造方法
applicationContext.xml配置文件如下:
我們使用constructor-arg來(lái)進(jìn)行配置, index屬性是用來(lái)表示構(gòu)造方法中參數(shù)的順序的,如果有多個(gè)參數(shù),則按照順序,從 0,1…來(lái)配置
我們現(xiàn)在可以運(yùn)行testMain.java了,結(jié)果跟使用Setter方法注入完全一樣.
其中需要注意一點(diǎn)有:構(gòu)造函數(shù)有多個(gè)參數(shù)的話,如:參數(shù)1,參數(shù)2,而參數(shù)2依賴于參數(shù)1,這中情況則要注意構(gòu)造函數(shù)的順序,必須將參數(shù)1放在參數(shù)2之前。
下面繼續(xù)說(shuō)說(shuō)我們不常用到的接口注入,還是以LogicAction為例,我們對(duì)他進(jìn)行了修改,如下所示:
LogicAction.java
package com.spring.test.di;
public class LoginAction {
private Logic logic;
public void execute() {
try {
Object obj = Class.forName("com.spring.test.di.LogicImpl")
.newInstance();
logic = (Logic) obj;
String name = logic.getName();
System.out.print("My Name Is " + name);
} catch (Exception e) {
e.printStackTrace();
}
}
}
配置文件:
對(duì)于接口注入這種方式,以上也只是我個(gè)人理解,不知道是否有什么問(wèn)題。呵呵
我們最常用就是Setter和構(gòu)造函數(shù)這兩種注入方法,至于他們各自的對(duì)比,我想在只要baidu一下就可以有清楚的答案了。
對(duì)于Spring的依賴注入,最重要的就是理解他的,一旦理解了,將會(huì)覺(jué)得非常的簡(jiǎn)單。無(wú)非就是讓容器來(lái)給我們實(shí)例化那些類,我們要做的就是給容器提供這個(gè)接口,這個(gè)接口就我們的set方法或者構(gòu)造函數(shù)了。
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
上一篇:web前端超出兩行用省略號(hào)表示的實(shí)現(xiàn)方法
欄 目:JSP編程
下一篇:jsp 使用request為頁(yè)面添加靜態(tài)數(shù)據(jù)的實(shí)例
本文標(biāo)題:Spring依賴注入的三種方式實(shí)例詳解
本文地址:http://www.jygsgssxh.com/a1/JSPbiancheng/11446.html


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-11web下載文件和跳轉(zhuǎn)的方法
- 01-11Spring注入Date類型的三種方法總結(jié)
- 01-11在JSP中使用formatNumber控制要顯示的小
- 01-11Properties 持久的屬性集的實(shí)例詳解
- 01-11EJB3.0部署消息驅(qū)動(dòng)Bean拋javax.naming.Na
- 01-11jsp文件下載功能實(shí)現(xiàn)代碼
- 01-11JSP頁(yè)面跳轉(zhuǎn)方法大全
- 01-11詳解Spring的核心機(jī)制依賴注入
- 01-11jsp 使用request為頁(yè)面添加靜態(tài)數(shù)據(jù)的實(shí)
- 01-11Spring獲取ApplicationContext對(duì)象工具類的
隨機(jī)閱讀
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什


