反射應用二 利用反射加配置檔案實現多資料庫的訪問

2021-09-07 16:27:28 字數 3896 閱讀 7474

專案整體結構如下圖所示:

1、database.instance是乙個類庫檔案,idbhelper是乙個介面,封裝的訪問資料庫資料的curd方法,oracledbhelper和sqlserverdbhelper類實現idbhelper介面,分別用來訪問oracle資料庫和sql server資料庫,介面和類的定義如下:

idbhelper介面定義

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

database.instance.inte***ce

831 }

oracledbhelper類定義如下

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;

6using

database.instance.inte***ce;78

namespace

database.instance.oracle916

17public

void

update()

1821

22public

void

retrieve()

2326

27public

void

delete()

2831

}32 }

sqlserverdbhelper類定義如下

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;

6using

database.instance.inte***ce;78

namespace

database.instance.sql_server916

17public

void

update()

1821

22public

void

retrieve()

2326

27public

void

delete()

2831

}32 }

2、myreflection是乙個控制台程式,用來測試

一、使用原始方法實現

使用原始的方法實現**如下:

1

using

database.instance.inte***ce;

2using

database.instance.oracle;

3using

system;

4using

system.collections.generic;

5using

system.linq;

6using

system.text;

7using

system.threading.tasks;

8using

system.reflection;

9using

system.configuration;

1011

namespace

myreflection

1227

}28 }

程式執行結果:

存在的問題:如果換一種資料庫,那麼就需要修改例項化的**,例如更換sql server資料庫,那麼**修改如下:

idbhelper dbhelper = new sqlserverdbhelper();
這樣很不方便,每次更換資料庫的時候,都需要修改例項化的**,有沒有什麼方便的方法可以做到不需要修改**就可以實現更換資料庫呢?辦法就是使用反射加配置檔案實現。

二、使用反射加配置檔案實現

配置檔案結構如下:

1

<?xml version="

1.0" encoding="

utf-8

" ?>23

5"database.instance.inte***ce.idbhelper

" value="

database.instance,database.instance.oracle.oracledbhelper

"/>67

8"v4.0

" sku="

.netframework,version=v4.5.1

" />910

program類定義如下:

1

using

database.instance.inte***ce;

2using

database.instance.oracle;

3using

database.instance.sql_server;

4using

system;

5using

system.collections.generic;

6using

system.linq;

7using

system.text;

8using

system.threading.tasks;

9using

system.reflection;

10using

system.configuration;

1112

namespace

myreflection

1335

}36 }

執行結果如下:

如果更新資料庫,只需要更新配置檔案中value的值即可,例如要更換sql server資料庫,配置檔案修改如下:

1

<?xml version="

1.0" encoding="

utf-8

" ?>23

5"database.instance.inte***ce.idbhelper

" value="

database.instance,database.instance.sql_server.sqlserverdbhelper

"/>67

8"v4.0

" sku="

.netframework,version=v4.5.1

" />910

program類不需要修改,執行結果如下:

工廠模式 反射 配置檔案

inte ce fruit public void eat class orange implements fruit 構造工廠類 也就是說以後如果我們在新增其他的例項的時候只需要修改工廠類就行了 class factory if orange equals fruitname return f c...

objective c實現配置檔案 反射

1.先寫plist配置檔案 plist寫到resouce裡面去 通過nsbundle把資料取plist讀出來 2.通過nsclassfromstring建立類 nsclassfromstring nsselectorfromstring 正常來說,id myobj nsclassfromstring...

利用反射讀取xml配置檔案的基本步驟

1.匯入dom4j的jar的包,2.匯入之後,在具體讀取檔案的類裡面進行具體讀取 1 例項化dom4j saxreader reader new saxreader 2 用輸入流進行讀取,得到類.得到類載入器.讀取方法 inputstream in getclass getclassloader g...