IoC(反向控制 依賴注入)這是Spring提出來了,這也是Spring一大特色。這里我不用多說,我們看Spring教程就可以了解。當(dāng)然我們不用Spring也可以用IoC,下面我將介紹不用Spring的IoC。 
IoC不是框架,她是java的技術(shù),如今大多數(shù)輕量級(jí)的容器都會(huì)用到IoC技術(shù)。這里我就用一個(gè)例子來說明: 
如:程序中有 Mysql.calss 、Oracle.class 、SqlServer.class三個(gè)類,但我們不知道用戶會(huì)選哪個(gè)數(shù)據(jù)庫(kù),所以我們不能把調(diào)用數(shù)據(jù)庫(kù)的方法固定。當(dāng)我們發(fā)布給用戶時(shí),我們也不可能去修改原代碼,而只需去修改一個(gè)配置文件如database=mysql/oracle/sqlserver就可以了。也可以這么說,向調(diào)用數(shù)據(jù)庫(kù)的方法傳入一個(gè)參數(shù)如mysql就調(diào)用Mysql.calss類。這就可以理解為反向控制和依賴注入。到這里也許我們會(huì)想當(dāng)傳入一個(gè)類對(duì)應(yīng)的參數(shù)就可以調(diào)用該類,那么我們傳入一個(gè)方法對(duì)應(yīng)的參數(shù)可以調(diào)用相對(duì)應(yīng)的方法嗎?答案是當(dāng)然可以的。 
也許程序員不愛看文字描述,下面的就用代碼來輔助: 
1、  Implements(接口) 或 extends(繼承類) 
2、  繼承接口或繼承類的類 
3、  用set方法和構(gòu)造法注入類的IOC類 
4、  調(diào)用IoC的實(shí)現(xiàn)類 
Mysql.class 、Oracle.class、 SqlServer.class繼承DatebaseImp.class 
DataBaseIoC.class用構(gòu)造和set方法注入Mysql.class 或Oracle.class或 SqlServer.class 
Test.class調(diào)用DataBaseIoC.class的方法。 

一、定義接口:DataBaseImp 
Java代碼  收藏代碼
  1. public interface DataBaseImp {  
  2.     public void getDate();  
  3. }  

二、定義調(diào)用接口的類Mysql、Oracle、Sqlserver 
Java代碼  收藏代碼
  1. public class Mysql  implements DataBaseImp {  
  2.     public void getDate() {  
  3.        System.out.println("調(diào)用Mysql數(shù)據(jù)");  
  4.     }  
  5. }  
  6.    
  7. public class Oracle implements DataBaseImp {  
  8.     public void getDate() {  
  9.        System.out.println("調(diào)用Oracle數(shù)據(jù)");  
  10.     }  
  11. }  
  12.    
  13. public class SqlServer implements DataBaseImp {  
  14.     public void getDate() {  
  15.        System.out.println("調(diào)用SqlServer數(shù)據(jù)");  
  16.     }  
  17. }  

三、定義注入類 
Java代碼  收藏代碼
  1. public class DateBaseIoC {  
  2.     private DataBaseImp dataBase;  
  3.     public void getDate() {  
  4.        dataBase.getDate();  
  5.     }  
  6.     //用set方法注入類  
  7.     public void setDataBase(DataBaseImp dataBase) {  
  8.        this.dataBase = dataBase;  
  9.     }  
  10. }  

四、定義實(shí)現(xiàn)類 
Java代碼  收藏代碼
  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.        DateBaseIoC baseIoC = new DateBaseIoC();  
  4.        baseIoC.setDataBase(new Mysql()); //調(diào)用set  
  5.        baseIoC.getDate();  
  6.     }  

}最后輸出:調(diào)用Mysql數(shù)據(jù) 

這里主要要說明一下IoC類 DateBaseIoC.class ,上面用的是set方法注入的,下面是構(gòu)造方法 
Java代碼  收藏代碼
  1. public class DateBaseIoC{  
  2.     private DataBaseImp dataBase;  
  3.     //構(gòu)造方法,在調(diào)用時(shí)構(gòu)造  
  4.     public DateBaseIoC(DataBaseImp dataBase) {  
  5.        this.dataBase=dataBase;  
  6.     }  
  7.     public void getDate() {  
  8.        dataBase.getDate();  
  9.     }  
  10. }