站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

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

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

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

        1、接口注入

        2、Setter方法注入

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

        (視頻教程推薦:java視頻)

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

        首先我們需要以下幾個(gè)類:

        接口 Login.java

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

        一個(gè)處理類 LoginAction.java

        還有一個(gè)測(cè)試類 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對(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 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?  }  }

        定義了一個(gè)Login 類型的變量 login, 在LoginAction并沒(méi)有對(duì)login 進(jìn)行實(shí)例化,而只有他對(duì)應(yīng)的setter/getter方法,因?yàn)槲覀冞@里使用的是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>

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

        OK了,這就是spring的setter方法注入。

        構(gòu)造方法注入

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

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

        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>

        我們使用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ō)我們不常用到的接口注入,還是以LoginAction為例,我們對(duì)他進(jìn)行了修改,如下所示:

        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和構(gòu)造函數(shù)這兩種注入方法。

        推薦教程:java入門(mén)程序

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 精品91自产拍在线观看二区| 午夜福利麻豆国产精品 | 国产精品无码免费专区午夜| 亚洲欧美精品一区久久中文字幕| 国产成人综合精品一区| 精品无码一区二区三区爱欲| 日本精品视频在线观看| 久久精品国产半推半就| 久久精品国产亚洲AV电影| 香蕉国产精品麻豆亚洲欧美日韩精品自拍欧美v国 | 亚洲国产精品综合久久一线| 高清日韩精品一区二区三区 | 亚洲精品成人区在线观看| 国产系列高清精品第一页| 在线观看91精品国产入口| 99久久国产综合精品麻豆| 日韩精品少妇无码受不了 | 蜜臀av无码人妻精品| 91嫩草亚洲精品| 亚洲国产精品热久久| 久久精品国产精品青草| 91精品国产自产在线观看永久| 精品久久久久久成人AV| 日韩精品无码熟人妻视频| 无码人妻精品一区二区三区99仓本 | 亚洲国产精品成人网址天堂 | mm1313亚洲国产精品无码试看| 精品久久久久久国产| 国产原创精品视频| 久久91精品国产91久久户| 久久国产精品成人免费| 久久99国产精品一区二区| www国产精品| 国产精品一在线观看| 国产精品亚洲专区在线观看| 国产成人精品精品欧美| 亚洲国产精品lv| 国产精品青草视频免费播放| 国产午夜精品理论片| 欧美成人精品高清在线播放| 西瓜精品国产自在现线|