承接上一篇:SpringBoot利用AOP拦截自定义注解(以日志为例)
调用服务一般是在customer里写个接口,接口里写上producer中controller里的方法(注意路径也要与controller中的一致),然后让其他类通过这个接口调用另一个服务的方法。
但这里有个问题:如果调用服务者要用到被调用服务者的实体类怎么办?比如我写了个操作日志数据库的服务(称为producer),然后在订单服务(称为customer)中需要写个拦截器获取这个对订单操作的日志,然后调用producer服务来存入数据库中。
总结为三个问题是:(1)customer将获取到的日志信息要进行set到producer实体类中的属性里,但是又不能在customer里写个producer实体类,否则太冗余了。(2)在customer的接口里再写一遍producer中的方法名和路径很麻烦,还容易出错。(3)这样还暴露了producer中的方法实现。
所以本文用到了一个抽取为jar包的方法。具体做法是:
将producer和customer都用到的实体类写在commonApi里,并且将producer中的controller类的接口(这样的话controller类就是这个接口的实现类了)也写在commonApi里,路径也是写在这个接口里,然后将这个接口打成jar包,producer和customer分别引入这个jar包。Producer中的controller去实现这个接口(这样controller里不用写路径了),customer里的接口去继承这个接口即可。如下:
commonApi:

Producer:

Customer:

然后其他方法要用时,注入就行了:


本文解决跨服务调用时实体类和接口重复定义的问题,通过将共用实体类与接口置于commonApi模块并打包成jar,实现producer与customer服务间高效复用,简化调用流程。

710

被折叠的 条评论
为什么被折叠?



