依靠注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依靠注入。
//定义Person接口 public interface Person { //Person接口里定义一个使用斧子的方法 public void useAxe(); }
然后是Axe的接口
//定义Axe接口
public interface Axe { //Axe接口里有个砍的方法 public void chop(); } Person的实现类
//Chinese实现Person接口
public class Chinese implements Person { //面向Axe接口编程,而不是具体的实现类 private Axe axe; //默认的构造器 public Chinese() {} //设值注入所需的setter方法 public void setAxe(Axe axe) { this.axe = axe; } //实现Person接口的useAxe方法 public void useAxe() { System.out.println(axe.chop()); } } Axe的第一个实现类
//Axe的第一个实现类 StoneAxe
public class StoneAxe implements Axe { //默认构造器 public StoneAxe() {} //实现Axe接口的chop方法 public String chop() { return "石斧砍柴好慢"; } } 下面采用Spring的配置文件将Person实例和Axe实例组织在一起。配置文件如下所示: