记一次“动态方法名”调用

接到需求,为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

记一次“动态方法名”调用的相关文章

Action中动态方法的调用 Action中通配符的使用 Result的配置

   Action中动态方法的调用 动态方法调用(Dynamic Method Invocation,DMI) 标识符:! 一.通过以下选中的文件来查看是否禁止调用动态方法 二.在我们自定义的action类中,我们不再单一的继承来自父类的方法,我们可以自定义自己的方法 1 package cn.jbit.booklist; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class BookList extends Act

iOS实现调用动态方法名有返回值的方法

需求: 有10个类, 每个类里头都有n个方法(前提是方法名有规律可循,比如 setA0,setA1-)  如果挨个去init类, 然后挨个调用方法,这样你一天就不用干别的了 简单的解决方法可以参考这个: iPhone开发中,动态调用类和方法 虽然说performSelector有返回值,但是在ARC下会有警告,因为方法名是动态的,系统并不知道返回值是什么样的类型.解决方法可以见这篇文章: "performSelector may cause a leak because its selector

struts2动态方法无法调用

struts2 大约2.3版本以后,调用动态方法会产生类似下面的错误 :Unable to instantiate Action, top.juson.study.action.Action2!eat, defined for 'action2!eat' in namespace '/'top.juson.study.action.Action2!eat 其中的defined for 'action2!eat' 说明这里没有把eat正常的解析为方法,而是和前面的action一起解析成了方法, 原

Struts 2之动态方法调用,不会的赶紧来

学习Struts2框架以来为了减少Action 的数量,我们可以使用动态方法进行处理. 动态方法调用(Dynamic Method Invocation,DMI)是指表单元素的Action并不是直接等于某个Action的名称,而是通过 在Action的名称中使用感叹号(!)来标识要调用的方法名称,格式为actionName! methodName.action. 但是由于动态方法的调用可能会带来安全隐患(通过URL可以执行Action中的任意方法),所以在确定使用动态方法调用时, 应该确保Act

Struts2的动态方法,及result跳转方式,全局结果以及默认的action的配置

Action动态方法的调用 首先我们需要在struts.xml中去配置一个常量值如下 那么去哪找呢?找到Struts-core.jar并打开 method属性 <action name="login" class="cn.ssh.ch08.UserAction" method="lgoin"> <result name="success">/success.jsp</result> <

C#动态方法调用

此篇将介绍C#如何在运行时动态调用方法.当某些类型是运行时动态确定时,编译时的静态编码是无法解决这些动态对象或类的方法调用的.此篇则给你一把利剑,让动态对象的方法调用成为可能. 1.动态调用dll里的方法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

Struts2系列:(7)通配符和动态方法调用

当前存在的问题:在struts.xml配置文件中,每个action标签对应一个类中的方法.但是,在实际JavaWeb项目开发中,有许多继承自ActionSupport类的类(其中也包括很多方法),如果每个方法对应一个action标签,那么就会造成struts.xml非常庞大. 本节中介绍的通配符 和 动态方法调用 就是为了解决这一问题.本节分成2个部分:(1)通配符映射 和 (2)动态调用 概念:Struts应用可能有很多action 声明,可把多个相似的映射关系简化为一个(通用)映射关系的机制

struts.enable.DynamicMethodInvocation = true 动态方法调用

default.properties 在Struts 2的核心jar包-struts2-core中,有一个default.properties的默认配置文件.里面配置了一些全局的信息,比如: struts.enable.DynamicMethodInvocation = true,-动态方法调用,为true时,就可以在struts.xml配置“*”的通配符,来调用action里的方法(下面介绍) struts.action.extension=action,-action 的后缀名,可以改成.t

Struts2动态方法调用怎么写配置

Struts2动态方法调用怎么写配置?可以这样: 1.Struts2入门之 HelloWorld  编写不依赖任何三方包的Action类 按照MVC架构,Action执行完后要返回显示的结果视图,所以,Action中的请求处理方法要返回一个逻辑名称来表示它要显示的结果视图,即方法的 返回值类型为代表逻辑名称的字符串. 在 struts.xml配置文件中配置Action类 struts.xml文件中的配置信息使用package进行分类和管理,不同的包对应不同的url访问路径,即在访问路径上就能区分