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

 更新时间:2019-04-17 21:43:16   作者:佚名   我要评论(0)

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


2. Setter方法注入


3. 构造方法注入
下面介绍一下这三种依赖注入在Spring中是怎么样实现的

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方法或者构造函数了。

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

您可能感兴趣的文章:

  • 详解Java Spring各种依赖注入注解的区别
  • Spring 依赖注入的几种方式详解
  • Spring依赖注入的两种方式(根据实例详解)
  • 理解Spring中的依赖注入和控制反转
  • Spring循环依赖正确性及Bean注入的顺序关系详解
  • Spring依赖注入的三种方式小结
  • 详解Spring的核心机制依赖注入
  • Spring学习之依赖注入的方法(三种)
  • 如何简单的理解依赖注入详解

相关文章

  • 基于vue通用表单解决方案的思考与分析

    基于vue通用表单解决方案的思考与分析

    前言 “那要怎么改?”,“那得改到什么时候?”,“什么时候才能支持这些功能?”。 再一次听到了这样的话,我沉默了。到底要怎样改,这也是我所思考的,最近
    2019-04-17
  • Spring依赖注入的三种方式实例详解

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

    Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的
    2019-04-17
  • 一篇文章搞懂JavaScript正则表达式之方法

    一篇文章搞懂JavaScript正则表达式之方法

    咱们来看看JavaScript中都有哪些操作正则的方法。 RegExp RegExp 是正则表达式的构造函数。 使用构造函数创建正则表达式有多种写法: new RegExp('abc');
    2019-04-17
  • PHP多进程通信-消息队列使用

    PHP多进程通信-消息队列使用

    向消息队列发送数据和获取数据的测试 <&#63;php $key=ftok(__FILE__,'a'); //获取消息队列 $queue=msg_get_queue($key,0666); //发送消息 //msg_send($que
    2019-04-17
  • 密码强度的正则表达式两种方案JS总结篇

    密码强度的正则表达式两种方案JS总结篇

    本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全。并分别给出了两个方案的解析和测试程序。一般大家可以根据自己的项目的实际需要,自行
    2019-04-17
  • VS+opencv实现鼠标移动图片

    VS+opencv实现鼠标移动图片

    基于控制台应用程序+opencv,实现点击鼠标左键,可以拖动图片以显示感兴趣区域 #include <opencv2/highgui/highgui.hpp> //#include <iostream> //using
    2019-04-17
  • vue使用el-upload上传文件及Feign服务间传递文件的方法

    vue使用el-upload上传文件及Feign服务间传递文件的方法

    一、前端代码 <el-upload class="step_content" drag action="string" ref="upload" :multiple="false" :http-req
    2019-04-17
  • 详解Spring的核心机制依赖注入

    详解Spring的核心机制依赖注入

    详解Spring的核心机制依赖注入 对于一般的Java项目,他们都或多或少有一种依赖型的关系,也就是由一些互相协作的对象构成的。Spring把这种互相协作的关系称为
    2019-04-17
  • JS正则表达式获取指定字符之后指定字符之前的字符串(推荐)

    JS正则表达式获取指定字符之后指定字符之前的字符串(推荐)

    一个常见的场景,获取:标签背景图片链接: 如字符串:var bgImg = "url (\"https://img30.360buyimg.com/sku/jfs/t26203/262/100869187/204098/1d1479e9/5b8
    2019-04-17
  • JSP状态管理的简单介绍

    JSP状态管理的简单介绍

    JSP状态管理的简单介绍 一 http协议的无状态性 无状态性是指:当浏览器发送请求给服务器时,服务器响应客户端请求。 但是当同一个浏览器再次发送请求给
    2019-04-17

最新评论