`
lupingzhang
  • 浏览: 36464 次
  • 性别: Icon_minigender_2
  • 来自: 云南
社区版块
存档分类
最新评论

java利用反射动态执行类方法

    博客分类:
  • java
阅读更多
Person类
public class Person {
  String name;
  String day;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
public void printlinfo() throws RuntimeException, IOException{
System.out.println(name);
System.out.println(day);
String url="http://www.163.com";
   openURL(url);

}
public void openURL (String url)throws RuntimeException,IOException{
String urlx=null;
urlx="rundll32 url.dll,FileProtocolHandler "+url;


Process p=Runtime.getRuntime().exec(""+urlx);

}

}




利用反映动态执行类的方法
  public static void print(byte[] b1,String tname,String tday) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException  {
   
    MyClassLoade myClassLoader=new MyClassLoade();
        Class c = myClassLoader.defineClass("Person", b1);
        System.out.println(c.getName());
        Object object= c.newInstance();
        Field[] fields=c.getDeclaredFields();
        System.out.println(fields.length);
        String args="java.lang.String";
        Method method1= c.getDeclaredMethod("setName", args.getClass())  ;
        method1.invoke(object,new Object[] {tname});
        Method method2= c.getDeclaredMethod("setDay", args.getClass())  ;
        method2.invoke(object,new Object[] {tday});
            Method method = c.getDeclaredMethod("printlinfo", null)  ;
        method.invoke(object);   
   
    }


参考:利用反射实现JavaBean的自动赋值
import java.lang.reflect.Method;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import com.sns.exception.ApplicationException;
public final class ParameterUtil {
public static void setFormBean(HttpServletRequest request, Object bean) {
  Class c = bean.getClass();
  Method[] ms = c.getMethods();
  for(int i=0; i<ms.length; i++) {
    String name = ms.getName();
    if(name.startsWith("set")) {
     Class[] cc = ms.getParameterTypes();
     if(cc.length==1) {
      String type = cc[0].getName(); // parameter type
      try {
        // get property name:
        String prop = Character.toLowerCase(name.charAt(3)) + name.substring(4);
        // get parameter value:
        String param = getString(request, prop);
        if(param!=null && !param.equals("")) {
         //ms.setAccessible(true);
         if(type.equals("java.lang.String")) {
          ms.invoke(bean, new Object[] {param});
         }
         else if(type.equals("int") || type.equals("java.lang.Integer")) {
          ms.invoke(bean, new Object[] {new Integer(param)});
         }
         else if(type.equals("long") || type.equals("java.lang.Long")) {
          ms.invoke(bean, new Object[] {new Long(param)});
         }
         else if(type.equals("boolean") || type.equals("java.lang.Boolean")) {
          ms.invoke(bean, new Object[] { Boolean.valueOf(param) });
         }
         else if(type.equals("java.util.Date")) {
          Date date = DateUtil.parseDateTime(param);
          if(date!=null)
            ms.invoke(bean, new Object[] {date});
         }
        }
      }
      catch(Exception e) {
        e.printStackTrace();
      }
     }
    }
  }
}
}
每当发现JavaBean中的setXxx()方法时,便自动寻找表单的对应字段xxx,如果找到,就利用反射调用此方法,将对应的字段值赋给JavaBean。
由于表单传递的变量名和值全部是字符串,因此需要做某些转换。目前,该程序能处理的数据类型包括:boolean,Boolean,int,Integer,long,Long,Date,不被支持的数据类型被自动忽略。你也可以很方便地添加新的类型。
请注意,只有public的set方法能够被调用。如果你希望private或protected的set方法也能被调用,请将红色标识的getMethods()改为getDeclaredMethods(),以便获得包括private和protected在内的所有方法,并将ms.setAccessible(true);的注释去掉,以便能正确调用private和protected方法。
反射是Java语言非常强大的功能,但是由于反射会破坏对象封装,并且反射调用的速度较慢,因此,只能在必要的工具类中使用。
分享到:
评论

相关推荐

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    Java反射动态加载实例类

    通过本示例,我们不仅理解了Java反射的基本概念和用途,还学会了如何利用反射动态加载并操作实例类。反射提供了一种灵活的方式来处理类和对象,尤其是在编写框架和插件系统时,能够根据运行时的条件动态地加载和执行...

    java 反射得到某个方法

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。通过反射,我们可以在不知道具体类名或方法名的情况下,动态地调用对象的方法或访问其属性。在...

    JAVA反射机制的入门代码

    总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    反射(Reflection)是Java的一个强大特性,允许程序在运行时检查类、接口、字段和方法等信息。本教程将深入探讨如何通过反射获取类、方法上的注解以及注解中的值和方法参数。 1. **注解的定义与使用** 注解以`@`...

    Java 反射-动态代理

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念,以及如何在实际开发中利用它们。 首先,我们来理解Java反射(Reflection)。Java反射...

    Java反射调用工具类

    首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不修改原有代码的情况下,增加或扩展对象的功能。代理类可以通过持有目标对象的引用,并在调用目标...

    JAVA的反射机制与动态代理

    首先,Java的反射机制允许我们在运行时检查类的信息,包括类名、属性、方法以及构造器等,并能动态地创建对象和调用方法。这主要通过`java.lang.Class`类和`java.lang.reflect`包中的相关API实现。例如,我们可以...

    java反射拼接方法名动态执行方法实例

    在上述实例中,我们看到如何利用反射动态地拼接方法名并执行相应的方法,从而避免了大量的if-else或switch语句。 首先,我们需要了解几个关键的Java反射API: 1. `Class&lt;?&gt;`: 代表一个类的类型,通过`Class.for...

    java反射机制工具类

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...

    java反射操作父类所有属性和方法

    在Java编程语言中,反射(Reflection)是一项强大的特性,它允许程序在运行时动态地获取类的信息,并能够直接操作这些信息。通过反射,我们可以获取类的字段、方法等元数据,甚至可以创建实例并调用其方法。本文将...

    java 反射 报错 no such method exception

    `NoSuchMethodException`属于`java.lang.reflect`包,当反射API试图查找一个指定签名的方法而该方法不存在于目标类中时,会抛出此异常。这意味着在编译时存在该方法,但在运行时却由于某种原因(如类加载问题、方法...

    Java反射泛型,实现数据库的动态增删改查等功能

    首先,Java反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和修改字段值。在数据库操作中,反射可以帮助我们根据字符串形式的SQL语句来动态执行相应的方法,无需预先编写大量硬编码...

    Java反射机制总结

    - **元数据查询**:开发人员可以利用反射来查询类的元数据,如字段名、方法签名等。 - **动态调用方法**:可以通过反射动态地调用类的方法,这对于实现回调机制、插件架构等很有帮助。 - **动态创建实例**:反射可以...

    java反射例子,封装了一个反射帮助类

    在Java中,反射提供了动态类型的能力,使我们可以在程序运行时检查类的信息,创建和调用对象的方法,甚至修改对象的属性。在标题和描述中提到的“java反射例子,封装了一个反射帮助类”,这表明我们有一个实用工具类...

    Java中给自己写的方法增加注释

    本篇文章将详细讲解如何在Java中给自己写的方法添加注释,以便于日后查阅和理解。 首先,我们了解Java中的三种基本注释方式: 1. 单行注释(//):这是最常用的注释方式,适用于单行的描述。 ```java // 这是一个...

    反射实例-JAVA反射机制

    例如,在Java中,反射允许程序动态地获取类的信息、创建对象、调用方法等,这对于框架设计、插件架构等方面极为有用。 #### 二、Java中的类反射 Java的反射机制是一种强大的工具,允许程序在运行时检查和操作类、...

    Java 1.5 反射机制

    例如,它利用反射加载和保存数据库实体,调用getter和setter方法来映射属性,以及执行HQL(Hibernate查询语言)中的动态方法调用。 总结来说,Java 1.5的反射机制极大地增强了Java的灵活性和动态性,使得开发者能够...

    用反射解析jar文件并执行里面Java代码

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。通过反射,我们可以在不知道具体类名的情况下实例化对象,调用方法,访问和修改私有成员,以及...

Global site tag (gtag.js) - Google Analytics