Spring的核心机制依赖注入简介

http://tech.ddvip.com   2006年11月20日    社区交流

本文详细介绍Spring的核心机制依赖注入简介

  Axe的另一个实现如下:

//Axe的另一个实现类 SteelAxe
public class SteelAxe implements Axe
{
 //默认构造器
 public SteelAxe()
 {}
 //实现Axe接口的chop方法
 public String chop()
 {
  return "钢斧砍柴真快";
 }
}

  然后,修改原来的Spring配置文件,在其中增加如下一行:

<!-- 定义一个steelAxe bean-->
<BEAN class=lee.SteelAxe id=steelAxe />

  该行重新定义了一个Axe的实现:SteelAxe。然后修改chinese bean的配置,将原来传入stoneAxe的地方改为传入steelAxe。也就是将

<REF local="”stoneAxe”/">

  改成

<REF local="”steelAxe”/">

  此时再次执行程序,将得到如下结果:

  钢斧砍柴真快

  Person与Axe之间没有任何代码耦合关系,bean与bean之间的依赖关系由Spring管理。采用setter方法为目标bean注入属性的方式,称为设值注入。

  业务对象的更换变得相当简单,对象与对象之间的依赖关系从代码里分离出来,通过配置文件动态管理。

  构造注入

  所谓构造注入,指通过构造函数来完成依赖关系的设定,而不是通过setter方法。对前面代码Chinese类做简单的修改,修改后的代码如下:

  //Chinese实现Person接口
public class Chinese implements Person
{
 //面向Axe接口编程,而不是具体的实现类
 private Axe axe;
 //默认的构造器
 public Chinese()
 {}
 //构造注入所需的带参数的构造器
 public Chinse(Axe axe)
 {
  this.axe = axe;
 }
 //实现Person接口的useAxe方法
 public void useAxe()
 {
  System.out.println(axe.chop());
 }
}

  此时无须Chinese类里的setAxe方法,构造Person实例时,Spring为Person实例注入所依赖的Axe实例。构造注入的配置文件也需做简单的修改,修改后的配置文件如下:

<!-- 下面是标准的XML文件头 -->
<xml version="1.0" encoding="gb2312"?>
<!-- 下面一行定义Spring的XML配置文件的dtd -->
 "http://www.springframework.org/dtd/spring-beans.dtd">
<!-- 以上三行对所有的Spring配置文件都是相同的 -->
<!-- Spring配置文件的根元素 -->
<BEANS>
 <!—定义第一个bean,该bean的id是chinese, class指定该bean实例的实现类 -->
 <BEAN class=lee.Chinese id=chinese>
</BEAN>
<!-- 定义stoneAxe bean -->
<BEAN class=lee.SteelAxe id=steelAxe />
</BEANS>

  执行效果与使用steelAxe设值注入时的执行效果完全一样。区别在于:创建Person实例中Axe属性的时机不同——设值注入是现创建一个默认的bean实例,然后调用对应的构造方法注入依赖关系。而构造注入则在创建bean实例时,已经完成了依赖关系的

来源:csdn    责编:豆豆技术应用

正在加载评论...