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