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
二、定義調用接口的類Mysql、Oracle、Sqlserver
三、定義注入類
四、定義實現類
}最后輸出:調用Mysql數據
這里主要要說明一下IoC類 DateBaseIoC.class ,上面用的是set方法注入的,下面是構造方法
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
- public interface DataBaseImp {
- public void getDate();
- }
二、定義調用接口的類Mysql、Oracle、Sqlserver
- public class Mysql implements DataBaseImp {
- public void getDate() {
- System.out.println("調用Mysql數據");
- }
- }
- public class Oracle implements DataBaseImp {
- public void getDate() {
- System.out.println("調用Oracle數據");
- }
- }
- public class SqlServer implements DataBaseImp {
- public void getDate() {
- System.out.println("調用SqlServer數據");
- }
- }
三、定義注入類
- public class DateBaseIoC {
- private DataBaseImp dataBase;
- public void getDate() {
- dataBase.getDate();
- }
- //用set方法注入類
- public void setDataBase(DataBaseImp dataBase) {
- this.dataBase = dataBase;
- }
- }
四、定義實現類
- public class Test {
- public static void main(String[] args) {
- DateBaseIoC baseIoC = new DateBaseIoC();
- baseIoC.setDataBase(new Mysql()); //調用set
- baseIoC.getDate();
- }
}最后輸出:調用Mysql數據
這里主要要說明一下IoC類 DateBaseIoC.class ,上面用的是set方法注入的,下面是構造方法
- public class DateBaseIoC{
- private DataBaseImp dataBase;
- //構造方法,在調用時構造
- public DateBaseIoC(DataBaseImp dataBase) {
- this.dataBase=dataBase;
- }
- public void getDate() {
- dataBase.getDate();
- }
- }