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

回到顶部