接到需求,为APP提供数据调用接口,需要保证客户端请求路径不变(请求头中的方法版本信息可以根据需求进行调整)。
最直观的想法是通过配置文件来完成。
例如在xml中,通过版本号,方法名,Service名来唯一定位需要执行的方法。
上述方法貌似可以解决问题。可是增加了很多无意义的重复劳动。
再想想,通过定义规范,注解,反射貌似也可以完成。
规范如下:
方法名+版本号,例如:findUser_1_0_1(String username);
在进行版本迭代的时候,对版本号进行调整。例如findUser_1_0_3(String username);
于此同时,在需要“动态方法名”的调用的方法上加入自定义注解(记录版本号)。
这个注解的作用,主要用来接收前段head中的版本信息,结合方法名。完成方法名的构造。
最后,通过反射,获取到被调用类上,有自定义注解的所有方法。
根据前段传递过来的方法名与版本号进行拼接。
将拼接结果与方法进行比对。
而后invoke回去即可完成"动态"方法调用。
为了代码的美观,将上述代码抽离成父类,供子类继承。
当然,这么搞也是需要做重复工作的,例如,每个Service都要继承BaseService(存放抽离代码的类)。
时间: 2024-10-13 01:51:30