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
-
public interface DataBaseImp {
-
public void getDate();
-
}
二、定義調(diào)用接口的類Mysql、Oracle、Sqlserver
-
public class Mysql implements DataBaseImp {
-
public void getDate() {
-
System.out.println("調(diào)用Mysql數(shù)據(jù)");
-
}
-
}
-
-
public class Oracle implements DataBaseImp {
-
public void getDate() {
-
System.out.println("調(diào)用Oracle數(shù)據(jù)");
-
}
-
}
-
-
public class SqlServer implements DataBaseImp {
-
public void getDate() {
-
System.out.println("調(diào)用SqlServer數(shù)據(jù)");
-
}
-
}
三、定義注入類
-
public class DateBaseIoC {
-
private DataBaseImp dataBase;
-
public void getDate() {
-
dataBase.getDate();
-
}
-
-
public void setDataBase(DataBaseImp dataBase) {
-
this.dataBase = dataBase;
-
}
-
}
四、定義實(shí)現(xiàn)類
-
public class Test {
-
public static void main(String[] args) {
-
DateBaseIoC baseIoC = new DateBaseIoC();
-
baseIoC.setDataBase(new Mysql());
-
baseIoC.getDate();
-
}
}最后輸出:調(diào)用Mysql數(shù)據(jù)
這里主要要說明一下IoC類
DateBaseIoC.class ,上面用的是set方法注入的,下面是構(gòu)造方法
-
public class DateBaseIoC{
-
private DataBaseImp dataBase;
-
-
public DateBaseIoC(DataBaseImp dataBase) {
-
this.dataBase=dataBase;
-
}
-
public void getDate() {
-
dataBase.getDate();
-
}
-
}
|
|
|
導(dǎo)航
常用鏈接
留言簿(1)
隨筆檔案(152)
我的收藏
搜索
最新評(píng)論

|
|