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

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

二、定義調用接口的類Mysql、Oracle、Sqlserver 
Java代碼  收藏代碼
  1. public class Mysql  implements DataBaseImp {  
  2.     public void getDate() {  
  3.        System.out.println("調用Mysql數據");  
  4.     }  
  5. }  
  6.    
  7. public class Oracle implements DataBaseImp {  
  8.     public void getDate() {  
  9.        System.out.println("調用Oracle數據");  
  10.     }  
  11. }  
  12.    
  13. public class SqlServer implements DataBaseImp {  
  14.     public void getDate() {  
  15.        System.out.println("調用SqlServer數據");  
  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. }  

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

}最后輸出:調用Mysql數據 

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