Spring的依赖注入(DI)三种方式
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配置文件如下:
<bean id="logic" class="com.spring.test.di.LogicImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<property name="logic" ref="logic"></property>
</bean>
现在可以运行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配置文件如下:
<bean id="logic" class="com.spring.test.di.LogicImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<constructor-arg index="0" ref="logic"></constructor-arg>
</bean>
我们使用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();
}
}
}
配置文件:
<bean id="logic" class="com.spring.test.di.LogicImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
</bean>
对于接口注入这种方式,以上也只是我个人理解,不知道是否有什么问题。呵呵
我们最常用就是Setter和构造函数这两种注入方法,至于他们各自的对比,我想在只要baidu一下就可以有清楚的答案了。
对于Spring的依赖注入,最重要的就是理解他的,一旦理解了,将会觉得非常的简单。无非就是让容器来给我们实例化那些类,我们要做的就是给容器提供这个接口,这个接口就我们的set方法或者构造函数了。
Spring的依赖注入(DI)三种方式的更多相关文章
- Spring注解依赖注入的三种方式的优缺点以及优先选择
当我们在使用依赖注入的时候,通常有三种方式: 1.通过构造器来注入: 2.通过setter方法来注入: 3.通过filed变量来注入: 那么他们有什么区别吗?应该选择哪种方式更好? 三种方式的区别小结 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...
- SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式
在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...
- Spring IOC 依赖注入的两种方式XML和注解
依赖注入的原理 依赖注入的方式---XML配置 依赖注入的方式---注解的方式 Spring 它的核心就是IOC和AOP.而IOC中实现Bean注入的实现方式之一就是DI(依赖注入). 一 DI的原理 ...
- Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...
- Spring依赖注入的三种方式
看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...
- Spring基础05——Spring依赖注入的三种方式
Spring支持3种依赖注入的方式:属性注入.构造器注入.工厂 1.属性注入 属性注入即通过setter方法注入Bean的属性或依赖的对象.使用<property>元素,使用name属性指 ...
- spring——依赖注入的三种方式
1 构造器注入(与构造器有直接关系) 默认无参构造 3种构造方式:通过<contructor-arg>调用类中的构造器 下标 <bean id="userService&q ...
- spring4之依赖注入的三种方式
1.Setter注入 <bean id="helloWorld" class="com.jdw.spring.beans.HelloWorld"> ...
随机推荐
- 微信公众号 SDK
<?php /* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved */ define("TOKEN&q ...
- 基于linux运用python开发知识点滴
我是小白,希望我的文章能对小白们有点作用. A.Linux的开源,优势明显,如何使用,基本命令如下: 个人认为最基础的两种操作: 1.文件操作: ls 看文件夹下内容 ls -a 隐藏文件 -l非隐藏 ...
- JS回车键处理
HTML <input type="text" id="keyword" name="keyword" autocomplete=&q ...
- Extjs学习笔记(-):ComboBox联动
http://www.cnblogs.com/wumin97136/archive/2007/12/24/1012720.html http://examples.ext.net/ http://ex ...
- Smart210学习记录-------文件操作
一.linux文件操作(只能在linux系统上用) 创建:int creat(const char* filename, mode_t mode) filename 表示要创建的文件名,mode表示对 ...
- 九、CCAction
之前介绍CCNode的时候说过,动作是指在特定时间内完成移动.缩放.旋转等操作的行为,节点可以通过运行动作来实现动画效果,这里的动作就是指CCAction对象,它有很多的子类,每个子类都封装了不同的动 ...
- Java 父类和子类
package chapter11; public class GeometricObject1 { private String color="white"; private b ...
- Core Java Volume I — 3.4. Variables
3.4. VariablesIn Java, every variable has a type. You declare a variable by placing the type first, ...
- git不能提交jar的设置
项目目录下 文件:.gitignore ,里面设置: *.class # Package Files # *.jar *.war *.ear 删除*.jar
- Java BigInteger(大数,ACM比赛专用)
用c或者C++处理大数比较麻烦,于是决心学习一下JAVA中大数运算. 先下载一个eclipse,具体的用法去问度娘吧 JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮 ...