背景
有一個銀行接口適配器,需要不同銀行實現(xiàn)對應接口

當各自銀行實現(xiàn)了該適配器定義的接口,轉(zhuǎn)換器 就可以根據(jù) bankCode ,獲取對應的適配器實現(xiàn)類,最后調(diào)用其獲取交易信息的接口
開始
有兩種方案:
方案一
定義一個普通工程,普通工程里定義兩個maven子模塊,一個模塊中再添加子模塊(適配器的實現(xiàn)類),另一個模塊則是調(diào)用子模塊數(shù)據(jù)的轉(zhuǎn)換器
這種方法需要將適配器實現(xiàn)模塊打成jar,并上傳到maven,才能被轉(zhuǎn)換器依賴,不方便使用
方案二:
定義一個maven工程,同樣定義兩個子模塊,但由于是maven工程,因此他們之間可以直接進行依賴
接下來就主要講一下,怎么配置這個工程
注:轉(zhuǎn)換器是一個Spring-boot工程
創(chuàng)建maven工程



創(chuàng)建maven子模塊
banks (適配器實現(xiàn)類模塊)

exchange(轉(zhuǎn)換器)
同圖5

刪掉沒用的 src 目錄
引入適配器jar
要引入的依賴就是 圖0 所定義的接口

在banks模塊下新建 icbc、bbc子模塊

刪掉banks下沒有使用的src目錄
分別在 icbd與bbc模塊實現(xiàn)adapter

將適配器實現(xiàn)類添加spring管理

在適配器實現(xiàn)類上加入 @Component 注解
轉(zhuǎn)換器 獲取adapter的bean對象(Spring-boot工程)
新建Spring Context 工具類

通過 SpringContextUtil 獲取Adapter類型的beans!

新建controller,然后進行接口調(diào)用

我們發(fā)現(xiàn),沒有任何返回數(shù)據(jù)
為什么?
猜想:是不是banks下的子模塊,并沒有被打入exchange模塊中,所以在exchange模塊中找不到適配器的實現(xiàn)類
答案的確就是這樣
接下來的目標就是將 banks下的模塊數(shù)據(jù)打入 exchange 中進行調(diào)用
配置pom,讓exchange模塊可以調(diào)用banks模塊的數(shù)據(jù)
方法一
exchange依賴banks下的各子模塊


現(xiàn)在,通過exchange已經(jīng)可以成功拿到各銀行適配器的信息了
通過bankCode調(diào)用適配器,從而獲取交易信息

調(diào)用結(jié)果

優(yōu)化
雖然現(xiàn)在可以實現(xiàn)調(diào)用,但是,卻不是很方便
入圖 14 那樣,我新添加一個銀行的模塊,就得在exchange中添加一個引用,顯的很累贅
exchange 應該只 依賴一個總的banks的引用即可,這種依賴維護,應交由banks內(nèi)部去處理
banks 模塊新建一個子模塊

新建了一個 bank-adapters 模塊,其余子模塊的依賴在這里完成
exchange只需要依賴 bank-adapters即可

這樣做,可以實現(xiàn)exchange對banks的解耦,維護起來會更方便
小提示
關(guān)于maven deploy
如果某個模塊不想被deploy到maven倉庫,可以通過pom進行配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
pom之間有繼承關(guān)系,如果父被跳過,那么子也一樣
所以:只是想某個或某幾個子跳過,需一個一個配置,且父不能跳過才行