站長資訊網
        最全最豐富的資訊網站

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

        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>

        我們使用constructor-arg來進行配置, 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入門程序

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品一区二区三区免费毛片爱| 久久亚洲精品中文字幕三区| 99久久精品国产免看国产一区| 国内精品国语自产拍在线观看| CAOPORM国产精品视频免费| 亚洲精品NV久久久久久久久久| 999久久久免费国产精品播放| 精品不卡一区二区| 亚洲精品无码AV中文字幕电影网站 | 97久人人做人人妻人人玩精品| 国产探花在线精品一区二区| 在线观看91精品国产网站| 精品福利一区二区三区精品国产第一国产综合精品| 国产成人精品视频一区二区不卡| 亚洲欧美日韩国产精品 | 国产精品无码国模私拍视频| 日韩精品免费在线视频| 2022国产精品不卡a| 潮喷大喷水系列无码久久精品| 色一乱一伦一图一区二区精品 | 亚洲AV无码之日韩精品| 久久精品夜色噜噜亚洲A∨| 成人国产一区二区三区精品 | 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲AV永久无码精品成人| 老司机精品影院91| 久久精品国产精品亚洲下载| 国产精品自产拍在线观看花钱看| 国产三级精品三级在专区| 国产精品成人99久久久久| 99久久亚洲综合精品成人| 夜色www国产精品资源站| 国产VA免费精品高清在线| 国产成人精品久久亚洲高清不卡| 四虎成人精品免费影院| 中文字幕成人精品久久不卡| 亚洲国产精品国自产电影| 亚洲第一精品福利| 99久久精品国产一区二区三区| 国产精品乱视频| 久久无码人妻精品一区二区三区|