当前位置 博文首页 > Spring依赖注入的三种方式实例详解

    Spring依赖注入的三种方式实例详解

    作者:admin 时间:2021-08-28 19:01

    Spring依赖注入(DI)的三种方式,分别为:

    1. 接口注入

    2. Setter方法注入

    3. 构造方法注入

    下面介绍一下这三种依赖注入在Spring中是怎么样实现的。

    首先我们需要以下几个类:

    接口 Logic.java

    接口实现类 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 会根据使用不同的注入方法而稍有不同

    下面按照注入的方法来看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 进行实例化,而只有他对应的setter/getter方法,因为我们这里使用的是Spring的依赖注入的方式

    applicationContext.xml配置文件如下:

    现在可以运行testMain.java了,我们可以看到控制台打出了 My Name Is fengyun

    OK了,这就是spring的setter方法注入,非常简单

    下面我们来看看构造方法注入

    顾名思义,构造方法注入,就是我们依靠LoginAction的构造方法来达到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的构造方法

    applicationContext.xml配置文件如下:

    我们使用constructor-arg来进行配置, index属性是用来表示构造方法中参数的顺序的,如果有多个参数,则按照顺序,从 0,1…来配置

    我们现在可以运行testMain.java了,结果跟使用Setter方法注入完全一样.

    其中需要注意一点有:构造函数有多个参数的话,如:参数1,参数2,而参数2依赖于参数1,这中情况则要注意构造函数的顺序,必须将参数1放在参数2之前。

    下面继续说说我们不常用到的接口注入,还是以LogicAction为例,我们对他进行了修改,如下所示:

    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();
    
      }
    
    }
    }
    
    

    配置文件:

    对于接口注入这种方式,以上也只是我个人理解,不知道是否有什么问题。呵呵

    我们最常用就是Setter和构造函数这两种注入方法,至于他们各自的对比,我想在只要baidu一下就可以有清楚的答案了。

    对于Spring的依赖注入,最重要的就是理解他的,一旦理解了,将会觉得非常的简单。无非就是让容器来给我们实例化那些类,我们要做的就是给容器提供这个接口,这个接口就我们的set方法或者构造函数了。

    如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    jsjbwy
    下一篇:没有了