依靠注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個概念。具體含義是:當(dāng)某個角色(可能是一個java實例,調(diào)用者)需要另一個角色(另一個Java實例,被調(diào)用者)的協(xié)助時,在傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例。但在Spring里,創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此稱為控制反轉(zhuǎn);創(chuàng)建被調(diào)用者實例的工作通常由Spring容器來完成,然后注入調(diào)用者,因此也稱為依靠注入。
//定義Person接口 public interface Person { //Person接口里定義一個使用斧子的方法 public void useAxe(); }
然后是Axe的接口
//定義Axe接口
public interface Axe { //Axe接口里有個砍的方法 public void chop(); } Person的實現(xiàn)類
//Chinese實現(xiàn)Person接口
public class Chinese implements Person { //面向Axe接口編程,而不是具體的實現(xiàn)類 private Axe axe; //默認的構(gòu)造器 public Chinese() {} //設(shè)值注入所需的setter方法 public void setAxe(Axe axe) { this.axe = axe; } //實現(xiàn)Person接口的useAxe方法 public void useAxe() { System.out.println(axe.chop()); } } Axe的第一個實現(xiàn)類
//Axe的第一個實現(xiàn)類 StoneAxe
public class StoneAxe implements Axe { //默認構(gòu)造器 public StoneAxe() {} //實現(xiàn)Axe接口的chop方法 public String chop() { return "石斧砍柴好慢"; } } 下面采用Spring的配置文件將Person實例和Axe實例組織在一起。配置文件如下所示: