通过java反射机制动态调用某方法的总结(推荐)_java

如下:

	public Object invokeMethod(String className, String methodName,
			Object[] args) throws Exception{

		Class ownerClass = Class.forName(className);
		Object owner = ownerClass.newInstance();

    Class[] argsClass = new Class[args.length];  

    for (int i = 0, j = args.length; i < j; i++) {  

      argsClass[i] = args[i].getClass();
    }  

    Method method = ownerClass.getMethod(methodName, argsClass);
		return method.invoke(owner, args);
	}

但是,我们在实际应用中,还会碰到一种情况,传入的实参和要被调用的方法的形参可能不完全一致:

比如,在struts1.x中的某个方法被调用时候,它会有HttpServletResponse类型的参数,

我们在tomcat中,request对象的实例其实是:org.apache.catalina.connector.ResponseFacade

它实现了接口:javax.servlet.http.HttpServletResponse;

如果我们直接把web容器中的request对象当做一个参数,传入上面的代码片段的话, 就有问题,这时,我们的处理办法是这样的,在action中,方法一般形如:

public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)

response一般位于第四个,那么我们修改以上的代码:

for (int i = 0, j = args.length; i < j; i++) {  

      argsClass[i] = args[i].getClass();
    }

改为:

for (int i = 0, j = args.length; i < j; i++) {
     if(i == 3){
      argsClass[i] = HttpServletResponse.class;
     }
     else{
      argsClass[i] = args[i].getClass();
     }

    } 

以上这篇通过java反射机制动态调用某方法的总结(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java反射机制调用方法、反射机制的动态代理、反射机制动态代理、java反射机制、java反射机制详解,以便于您获取更多的相关知识。

时间: 2024-08-03 15:37:07

通过java反射机制动态调用某方法的总结(推荐)_java的相关文章

java 利用java反射机制动态加载类的简单实现_java

如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

Java的反射机制---动态调用对象的简单方法_java

唉!我还真是在面试中学习新东东啊,一个公司刚刚给了个测试,不过我很奇怪的是为什么web developer的职位居然考java的反射机制题,不过学习研究一下反射机制对我来说是件好事啦! 先说说什么是java反射机制吧,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这 种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.主要功能:在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对 象:在运行时判断任意一个

如何通过java反射机制动态获得方法名

问题描述 AllBOClient xf = new AllBOClient(pb.getWsdlurl());AllBOPortType bo = xf.getAllBOHttpPort();bo.notice2Province(a[1],a[0]);在数据库中存有notice2province的值,怎样运用反射机制动态获得notice2province的值?问题补充:从数据库读出值来替换notice2Province问题补充:congjl2002的答案似乎还少了一步,我还需要向得到的方法中传入

java 反射 动态调用不同类的静态方法(推荐)_java

准备调用的类 package ss; public class Use { public static Integer demo( String s ){ System.err.println(s+"<<<<<<成功!"); Integer ss=1; return ss; } } 执行调用的类 public class Ceshi { public static void main(String[] args) { try { String cla

java 反射和动态代理详解及实例代码_java

一.java中的反射 1.通过反射加载类的属性和方法实例代码: /** * java.lang.Class 是反射的源头 * 我们创建了一个类,通过编译(javac.exe)生成对应的class文件,之后我们通过java.exe加载(jvm的类加载器加载)此class文件 * 此class文件加载到内存后,就是一个运行时类,存在缓存区,这个运行时类本事就是一个Class的实例 * 每一个运行时类只加载一次, */ Class<StudentExam> clazz = StudentExam.c

java反射机制如何 得到当前方法的 method对象

问题描述 写了个获取调用方法的method对象的方法,但是无法区分重载方法publicstaticMethodgetCurrentMethod(){StackTraceElement[]yste=Thread.currentThread().getStackTrace();if(yste.length<2){returnnull;}/**getMethodName**/Stringstr="";for(inti=0;i<yste.length;i++){if(yste[i]

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值   package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getN

Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?

问题描述 Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法? Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?而要invoke来调用对象的方法? 解决方案 知道方法的话当然可以不用invoke.需要invoke的方法大多是在写代码的时候无法确定的 解决方案二: 问题出现的场景是什么? 解决方案三: 面向接口,有些包是不同厂商实现的 反射能通过编译,在运行时才报错 解决方案四: 没有你想的那么简单,你多看看java的设计模式,和

利用java反射机制实现自动调用类的简单方法_java

1. 新建TestServlet类 package com.yanek.test; import java.io.IOException; import java.lang.reflect.Method; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.ht