|
今天做公司的以前項目的時候發(fā)現(xiàn)項目中有個特別好的東西,記錄下來,分享一下 發(fā)現(xiàn)spring有個這樣的功能,我也不知道這個是東西應(yīng)該怎么稱呼,就是通過輸入?yún)?shù),動態(tài)決定調(diào)用接口的實現(xiàn)類。簡單理解就是在spring配置文件定義若干個參數(shù),然后,定義同樣多的實現(xiàn)類實現(xiàn)同一個接口,在接口調(diào)用方法中,通過輸入?yún)?shù),就能動態(tài)決定接口調(diào)用具體哪個實現(xiàn)類。這樣的好處就是對外發(fā)布接口時,接口通過參數(shù)能動態(tài)的調(diào)用某個服務(wù)。如果你注重于系統(tǒng)的可擴展性,這個方法確實是個好方法,我重新建了個工程,用來更加簡明的理解這個實現(xiàn)過程。
工程結(jié)構(gòu)如圖:myeclipse工程
首先看spring配置文件,定義了三個bean,其中myService,myService2是接口MyService的實現(xiàn)類
其中MyServiceMg中定義了一個map,在spring加載的時候會把配置文件里的這個map動態(tài)的加載到 mappingServices里去,看MyServiceMy類
在這個handle方法里就是根據(jù)參數(shù)來決定MyService動態(tài)調(diào)用的實現(xiàn)類
看測試結(jié)果就明白了
三個測試結(jié)果出來了,第一個和第二個參數(shù)都在配置文件里有配置,所以能動態(tài)調(diào)用相應(yīng)的實現(xiàn)類來實現(xiàn),第三個沒有配置,所以拋出異常,怎么樣,這個東西是不是有點意思了,能動態(tài)調(diào)用具體的實現(xiàn)類,我想想以后肯定很多地方能夠用到 |
|
|