利用注解 + 反射消除重复代码 - 没看懂这个有什么用

1. 案例场景

假设银行提供了一些 API 接口,对参数的序列化有点特殊,不使用 JSON,而是需要我们把参数依次拼在一起构成一个大字符串

[
](http://mp.weixin.qq.com/s?__biz=Mzk0NjIxNDYxMQ==&mid=2247501111&idx=2&sn=22f5f987ac660d9e4cca81ebbd464ed3&chksm=c30b068bf47c8f9db8e1ebf4c044310cf2568039c614deb714ada20c9921509c630778630387&scene=21#wechat_redirect)

按照银行提供的API文档顺序,将所有的参数构成定长的数据,并且拼接在一起作为一整个字符串

[
](http://mp.weixin.qq.com/s?__biz=Mzk0NjIxNDYxMQ==&mid=2247501111&idx=2&sn=22f5f987ac660d9e4cca81ebbd464ed3&chksm=c30b068bf47c8f9db8e1ebf4c044310cf2568039c614deb714ada20c9921509c630778630387&scene=21#wechat_redirect)

因为每一种参数都有固定长度,未达到长度需要进行填充处理

[
](http://mp.weixin.qq.com/s?__biz=Mzk0NjIxNDYxMQ==&mid=2247501111&idx=2&sn=22f5f987ac660d9e4cca81ebbd464ed3&chksm=c30b068bf47c8f9db8e1ebf4c044310cf2568039c614deb714ada20c9921509c630778630387&scene=21#wechat_redirect)


2. 初步代码实现

public class BankService {

这样做能够基本满足需求,但是存在一些问题:

[
](http://mp.weixin.qq.com/s?__biz=Mzk0NjIxNDYxMQ==&mid=2247501084&idx=2&sn=475c875ba3f7ec626ee3da6fbfc840d9&chksm=c30b06a0f47c8fb6bc3e7fcd86f2099f2c0fe2da2df57e985da788110ee4e62afa43b4a6ae42&scene=21#wechat_redirect)


3. 使用接口和反射优化代码

3.1 实现定义了所有接口参数的POJO类

@Data

3.2 定义注解本身

@Retention(RetentionPolicy.RUNTIME)

3.3 反射配合注解实现动态的接口参数组装

private static String remoteCall(AbstractAPI api) throws IOException {

通过反射来动态获得class的信息,并在runtime的时候完成组装过程。这样做的好处是开发的时候会方便直观很多,然后将逻辑与细节隐藏起来,并且集中放到了一个方法当中,减少了重复,以及维护当中bug的出现。

3.4 在代码中的应用

@BankAPI(url = "/bank/createUser", desc = "创建用户接口")

原网址: 访问
创建于: 2021-08-11 14:25:32
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论