• 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"></property>

    </bean>

    现在可以运行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">

    <constructor­arg index="0" ref="login"></constructor­arg>

    </bean>

    我们使用constructor­arg来进行配置, 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">

    </bean>

    我们最常用就是Setter和构造函数这两种注入方法

    对于Spring的依赖注入,最重要的就是理解他的,一旦理解了,将会觉得非常的简单。无非就是让

    容器来给我们实例化那些类,我们要做的就是给容器提供这个接口,这个接口就我们的set方法或

    者构造函数了。 

  • 相关阅读:
    eclipse中注释模板的修改
    Oracle 解锁Record is locked by another user
    Oracle 解锁Record is locked by another user
    提高网站速度的最佳实践
    Tomcat中配置SSL
    CentOS QQ
    csshack
    文件contentType
    JavaScript实现Iframe自适应其加载的内容高度
    转timer
  • 原文地址:https://www.cnblogs.com/ycq-qiang/p/11161941.html
Copyright © 2020-2023  润新知