Spring依赖注入(DI)的三种方式
本文内容纲要:Spring依赖注入(DI)的三种方式
Spring****依赖注入(DI)的三种方式 Spring依赖注入(DI)的三种方式,分别为:
1. 接口注入
2. Setter方法注入
3. 构造方法注入
下面介绍一下这三种依赖注入在Spring中是怎么样实现的。
首先我们需要以下几个类:
接口 Login.java
接口实现类 LoginImpl.java
一个处理类 LoginAction.java
还有一个测试类 TestMain.java
LoginImpl.java如下:
1 package com.spring.test.di; 2
3 public class LoginImpl implements Login{
4
5 public String getName(){
6
7 return "fengyun";
8
9 }
10
11 }
12
13 TestMain.java
14
15 package com.spring.test.di;
16
17 import org.springframework.context.ApplicationContext;
18
19 import org.springframework.context.support.FileSystemXmlApplicationContext;
20
21 public class TestMain {
22
23 /**
24
25 * @param args
26
27 */
28
29 public static void main(String[] args) {// 得到ApplicationContext对象
30
31 ApplicationContext ctx = new FileSystemXmlApplicationContext(
32
33 "applicationContext.xml");
34
35 // 得到Bean
36
37 LoginAction loginAction = (LoginAction) ctx.getBean("loginAction");
38
39 loginAction.execute();
40
41 }
42
43 }
LoginAction.java 会根据使用不同的注入方法而稍有不同
下面按照注入的方法来看LoginAction.java类
Setter方法注入:
1 package com.spring.test.di; 2
3 public class LoginAction {
4
5 private Login login;
6
7 public void execute() {
8
9 String name = login.getName();
10
11 System.out.print("My Name Is " + name);
12
13 }
14
15 /**
16
17 * @return the login
18
19 */
20
21 public Logic getLogin() {
22
23 return login;
24
25 }
26
27 /**
28
29 * @param login
30
31 * the login to set
32
33 */
34
35 public void setLogin(Login login) {
36
37 this.login = login;
38
39 }
40
41 }
定义了一个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">
现在可以运行testMain.java了,我们可以看到控制台打出了 My Name Is fengyun
OK了,这就是spring的setter方法注入,非常简单
下面我们来看看构造方法注入
顾名思义,构造方法注入,就是我们依靠LoginAction的构造方法来达到DI的目的,如下所示:
1 LoginAction.java 2
3 package com.spring.test.di;
4
5 public class LoginAction {
6
7 private Login login;
8
9 public LoginAction(Login login) {
10
11 this.login = login;
12
13 }
14
15 public void execute() {
16
17 String name = login.getName();
18
19 System.out.print("My Name Is " + name);
20
21 }
22
23 }
这里我们添加了一个LoginAction的构造方法
applicationContext.xml配置文件如下:
<bean id="login" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
<constructorarg index="0" ref="login">
我们使用constructorarg来进行配置, index属性是用来表示构造方法中参数的顺序的,如果有多
个参数,则按照顺序,从 0,1...来配置
我们现在可以运行testMain.java了,结果跟使用Setter方法注入完全一样.其中需要注意一点有:构造函数有多个参数的话,如:参数1,参数2,而参数2依赖于参数1,这
中情况则要注意构造函数的顺序,必须将参数1放在参数2之前。
下面继续说说我们不常用到的接口注入,还是以LoginAction为例,我们对他进行了修改,如下所
示:
1 LoginAction.java 2
3 package com.spring.test.di;
4
5 public class LoginAction {
6
7 private Logic login;
8
9 public void execute() {
10
11 try {
12
13 Object obj = Class.forName("com.spring.test.di.LoginImpl")
14
15 .newInstance();
16
17 login = (Login) obj;
18
19 String name = login.getName();
20
21 System.out.print("My Name Is " + name);
22
23 } catch (Exception e) {
24
25 e.printStackTrace();
26
27 }
28
29 }
30
31 }
配置文件:
<bean id="logic" class="com.spring.test.di.LoginImpl"/>
<bean id="loginAction" class="com.spring.test.di.LoginAction">
我们最常用就是Setter和构造函数这两种注入方法
对于Spring的依赖注入,最重要的就是理解他的,一旦理解了,将会觉得非常的简单。无非就是让
容器来给我们实例化那些类,我们要做的就是给容器提供这个接口,这个接口就我们的set方法或
者构造函数了。
本文内容总结:Spring依赖注入(DI)的三种方式
原文链接:https://www.cnblogs.com/ycq-qiang/p/11161941.html
以上是 Spring依赖注入(DI)的三种方式 的全部内容, 来源链接: utcz.com/z/362634.html