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