咔叽游戏

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 434|回复: 0

[JSP编程] Spring依赖注入的三种方式实例详解

[复制链接]
  • TA的每日心情
    无聊
    2019-5-27 08:20
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    发表于 2020-2-11 19:21:14 | 显示全部楼层 |阅读模式
    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方法或者构造函数了。
    如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    QQ|免责声明|小黑屋|手机版|Archiver|咔叽游戏

    GMT+8, 2024-3-29 17:48

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表