依赖注入(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>

下面继续说说我们不常用到的接口注入,还是以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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值