免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
依賴注入三種方式

Spring依賴注入(DI)的三種方式,分別為:

1. 接口注入

2. Setter方法注入

3. 構(gòu)造方法注入

下面介紹一下這三種依賴注入在Spring中是怎么樣實(shí)現(xiàn)的。

首先我們需要以下幾個類:

接口 Logic.java

接口實(shí)現(xiàn)類 LogicImpl.java

一個處理類 LoginAction.java

還有一個測試類 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對象

ApplicationContext ctx = new FileSystemXmlApplicationContext(

"applicationContext.xml");

// 得到Bean

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

loginAction.execute();

}

}

LoginAction.java 會根據(jù)使用不同的注入方法而稍有不同

下面按照注入的方法來看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;

}

}

定義了一個Logic 類型的變量 logic, 在LoginAction并沒有對logic 進(jìn)行實(shí)例化,而只有他對應(yīng)的setter/getter方法,因?yàn)槲覀冞@里使用的是Spring的依賴注入的方式

applicationContext.xml配置文件如下:

<bean id="logic" class="com.spring.test.di.LogicImpl"/>

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

<property name="logic" ref="logic"></property>

</bean>

現(xiàn)在可以運(yùn)行testMain.java了,我們可以看到控制臺打出了 My Name Is fengyun

OK了,這就是springsetter方法注入,非常簡單

下面我們來看看構(gòu)造方法注入

顧名思義,構(gòu)造方法注入,就是我們依靠LoginAction的構(gòu)造方法來達(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);

}

}

這里我們添加了一個LoginAction的構(gòu)造方法

applicationContext.xml配置文件如下:

<bean id="logic" class="com.spring.test.di.LogicImpl"/>

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

<constructor-arg index="0" ref="logic"></constructor-arg>

</bean>

 

constructor-arg: constructor arguments, 構(gòu)造函數(shù)的參數(shù)。

使用構(gòu)造子注入時,則使用constructor-arg子標(biāo)簽,來指定構(gòu)造函數(shù)的參數(shù)。

 

我們使用constructor-arg來進(jìn)行配置, index屬性是用來表示構(gòu)造方法中參數(shù)的順序的,如果有多個參數(shù),則按照順序,從 0,1...來配置

我們現(xiàn)在可以運(yùn)行testMain.java,結(jié)果跟使用Setter方法注入完全一樣.

其中需要注意一點(diǎn)有:構(gòu)造函數(shù)有多個參數(shù)的話,如:參數(shù)1,參數(shù)2,而參數(shù)2依賴于參數(shù)1,這中情況則要注意構(gòu)造函數(shù)的順序,必須將參數(shù)1放在參數(shù)2之前。

下面繼續(xù)說說我們不常用到的接口注入,還是以LogicAction為例,我們對他進(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();

}

}

}

配置文件:

<bean id="logic" class="com.spring.test.di.LogicImpl"/>

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

</bean>

對于接口注入這種方式,以上也只是我個人理解,不知道是否有什么問題。呵呵

我們最常用就是Setter和構(gòu)造函數(shù)這兩種注入方法,至于他們各自的對比,我想在只要baidu一下就可以有清楚的答案了。

對于Spring的依賴注入,最重要的就是理解他的,一旦理解了,將會覺得非常的簡單。無非就是讓容器來給我們實(shí)例化那些類,我們要做的就是給容器提供這個接口,這個接口就我們的set方法或者構(gòu)造函數(shù)了。

以上就是我對Spring的DI的一個簡單的理解,希望在今后的工作繼續(xù)深入的學(xué)習(xí)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DI學(xué)習(xí)
openfire原理和源碼分析
Spring相關(guān)知識
c#基礎(chǔ)知識(6)
Spring源碼—Bean的加載
怎么解決含參數(shù)不等式恒成立問題?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服