背景
有一个银行接口适配器,需要不同银行实现对应接口
当各自银行实现了该适配器定义的接口,转换器 就可以根据 bankCode ,获取对应的适配器实现类,最后调用其获取交易信息的接口
开始
有两种方案:
方案一
定义一个普通工程,普通工程里定义两个maven子模块,一个模块中再添加子模块(适配器的实现类),另一个模块则是调用子模块数据的转换器
这种方法需要将适配器实现模块打成jar,并上传到maven,才能被转换器依赖,不方便使用
方案二:
定义一个maven工程,同样定义两个子模块,但由于是maven工程,因此他们之间可以直接进行依赖
接下来就主要讲一下,怎么配置这个工程
注:转换器是一个Spring-boot工程
创建maven工程
创建maven子模块
banks (适配器实现类模块)
exchange(转换器)
同图5
删掉没用的 src 目录
引入适配器jar
要引入的依赖就是 图0 所定义的接口
在banks模块下新建 icbc、bbc子模块
删掉banks下没有使用的src目录
分别在 icbd与bbc模块实现adapter
将适配器实现类添加spring管理
在适配器实现类上加入 @Component 注解
转换器 获取adapter的bean对象(Spring-boot工程)
新建Spring Context 工具类
通过 SpringContextUtil 获取Adapter类型的beans!
新建controller,然后进行接口调用
我们发现,没有任何返回数据
为什么?
猜想:是不是banks下的子模块,并没有被打入exchange模块中,所以在exchange模块中找不到适配器的实现类
答案的确就是这样
接下来的目标就是将 banks下的模块数据打入 exchange 中进行调用
配置pom,让exchange模块可以调用banks模块的数据
方法一
exchange依赖banks下的各子模块
现在,通过exchange已经可以成功拿到各银行适配器的信息了
通过bankCode调用适配器,从而获取交易信息
调用结果
优化
虽然现在可以实现调用,但是,却不是很方便
入图 14 那样,我新添加一个银行的模块,就得在exchange中添加一个引用,显的很累赘
exchange 应该只 依赖一个总的banks的引用即可,这种依赖维护,应交由banks内部去处理
banks 模块新建一个子模块
新建了一个 bank-adapters 模块,其余子模块的依赖在这里完成
exchange只需要依赖 bank-adapters即可
这样做,可以实现exchange对banks的解耦,维护起来会更方便
小提示
关于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之间有继承关系,如果父被跳过,那么子也一样
所以:只是想某个或某几个子跳过,需一个一个配置,且父不能跳过才行