可以通过http请求,访问到后台控制层,进行控制调用的是哪个方法
这里使用Scanner 进行模拟请求参数
package com.xy.refl; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class ExcuteMethod { public static void main(String[] args) throws Exception { /* * 通过反射来动态调用方法 * * 可控制台输入方法,方法就可以被调用 */ Scanner scanner = new Scanner(System.in); System.out.println("请输入要执行的方法"); /** * 通过反射查询所有的方法 * * javac ClassLoader * 源代码 === .class ===》 JVM虚拟机中 */ Class clazz = Class.forName("com.xy.pojo.Person"); int i =1; Method [] methods = clazz.getMethods(); for(Method method: methods) { System.out.println((i++) + ":" + method.getName()); } /** * 实例化对象 */ Object object = clazz.newInstance(); /** * 接受要执行的方法 */ int methodStr = scanner.nextInt(); Method method = methods[methodStr -1 ]; /** * 判断是否有参数 * method.getParameterCount:获取方法参数的个数 * */ int paramCount = method.getParameterCount(); /** * 存储参数的集合 */ List<Object> paramList = new ArrayList<Object>(); if(paramCount != 0) { for(int y=0;y<paramCount;y++) { System.out.println("请输入第" + (y +1) + "几个参数值"); paramList.add(scanner.next()); } /** * 检查类型,并将参数转变为对应的类型 */ Object[] toTypeValue = new Object[paramCount]; Class<?>[] paramClass = method.getParameterTypes(); for(int x=0;x<paramClass.length;x++) { /** * method.getParameterTypes 获取参数类型的 * 参数类型来进行类型转换 */ Class paramCla = paramClass[x]; if(paramCla.getName().equals("java.lang.String")) { toTypeValue[x] = paramList.get(x) + ""; ; } if(paramCla.getName().equals("int")) { toTypeValue[x] = Integer.parseInt(paramList.get(x) + "") ; } } /** * 声明方法,调用方法 */ Method paramMethod = clazz.getMethod(method.getName(),paramClass); paramMethod.invoke(object,toTypeValue); }else { method.invoke(object); } } }
反射调用的类
package com.xy.pojo; import java.util.ArrayList; import java.util.List; import com.xy.annotation.MyAnnotation; public class Person { public static List <Person> personList = new ArrayList<Person>(); public Person() { System.out.println("Person已经被实例化"); } /** * public com.xy.pojo.Person() public com.xy.pojo.Person(java.lang.String) * @param name */ public Person(String name) { this.name = name; System.out.println("Person已经被实例化----有参数"); } @MyAnnotation(value = "12123") private String name; public String age; public void play(String name,int age ,String like) { System.out.println(name + "人干饭!!!!!!!!!!!!"); } public void sleep() { System.out.println("人睡觉!!!!!!!!!!!!"); } public void addPerson(Person person) { personList.add(person); System.out.println("添加成功过"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
1. 本站所有资源来源于用户上传和网络,如有侵权请及时联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"mababa.xin",如遇到无法解压的请联系管理员!
码巴巴-优质代码创造者 » java 反射动态调用任意方法(有参数,无参数)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 一个高级程序员模板开发平台
这么6的代码,作者一定很帅吧
吴彦祖
简直爱了!!!
作者大帅b
这代码,不去sun公司可惜了啊