`

java反射 终极实例

    博客分类:
  • JAVA
 
阅读更多

//用来测试的javaBean

public class Stu {

private int id;
private String stuName;

public Stu(){}
public Stu(int id,String stuName){
   this.id=id;
   this.stuName=stuName;
}
public void setAll(int id,String stuName){
   this.id=id;
   this.stuName=stuName;
}
public int getId() {
   return id;
}
public void setId(int id) {
   this.id = id;
}
public String getStuName() {
   return stuName;
}
public void setStuName(String stuName) {
   this.stuName = stuName;
}
public String toString(){
   return id+stuName;
}
}
//

public static void main(String[] args) throws ClassNotFoundException {

   Class cla=Class.forName("com.testBean.Stu");
   //解析属性信息
   Field[] f=cla.getDeclaredFields();
   for (Field field : f) {
    System.out.println("属性="+field.toString());
    System.out.println("数据类型="+field.getType());
    System.out.println("属性名="+field.getName());
    int mod=field.getModifiers();
    System.out.println("属性修饰符="+Modifier.toString(mod));
   }
   //解析方法信息
   Method[] methodlist=cla.getDeclaredMethods();
   for (Method method : methodlist) {
    System.out.println("---------------");
    System.out.println("方法="+method.toString());
    System.out.println("方法名="+method.getName());
    int mod=method.getModifiers();
    System.out.println("方法修饰符="+Modifier.toString(mod));
    System.out.println("方法参数列表");
    Class pts[]=method.getParameterTypes();
    for (int i = 0; i < pts.length; i++) {
     Class class1 = pts[i];
     if(i!=0){
      System.out.println(class1);
     }
     System.out.println("返回类型"+method.getReturnType());
    }
   }
}

//result:

输入一个类名:
属性=private int com.testBean.Stu.id
数据类型=int
属性名=id
属性修饰符=private
属性=private java.lang.String com.testBean.Stu.stuName
数据类型=class java.lang.String
属性名=stuName
属性修饰符=private
---------------
方法=public void com.testBean.Stu.setAll(int,java.lang.String)
方法名=setAll
方法修饰符=public
方法参数列表
返回类型void
class java.lang.String
返回类型void
---------------
方法=public void com.testBean.Stu.setId(int)
方法名=setId
方法修饰符=public
方法参数列表
返回类型void
---------------
方法=public java.lang.String com.testBean.Stu.getStuName()
方法名=getStuName
方法修饰符=public
方法参数列表
---------------
方法=public void com.testBean.Stu.setStuName(java.lang.String)
方法名=setStuName
方法修饰符=public
方法参数列表
返回类型void
---------------
方法=public java.lang.String com.testBean.Stu.toString()
方法名=toString
方法修饰符=public
方法参数列表
---------------
方法=public int com.testBean.Stu.getId()
方法名=getId
方法修饰符=public
方法参数列表

//方法一
public static void mm(Class cla){
   Field[] fs=cla.getDeclaredFields();
   //fs=cla.getFields();加了这个的话就只获得public 公有的
   for (Field f : fs) {
    System.out.println(f.getName());
   }
}

//方法一输出结果:

id

stuName

////////////一个应用实例

package com.reflect;

import java.beans.IntrospectionException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import com.testBean.Stu;
public class Test {

/**
* 利用反射对实体bean赋值

*/
public static void main(String[] args) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchFieldException {
   // TODO 自动生成方法存根
   Stu stu=new Stu();
   Test t=new Test();
   List propertyVales=t.getPropertyVal();
   for (Object object : propertyVales) {
    System.out.println(object.toString());
   }
   List propertyNames=t.getPropertyNames(Stu.class);
   for (Object object : propertyNames) {
    System.out.println(object);
   }
   t.method(stu, propertyNames, propertyVales);
   System.out.println(stu);
  

}

public List getPropertyVal(){
   List propertyValues=new ArrayList();
   propertyValues.add(10);
   propertyValues.add("my name");
   return propertyValues;
}

public void method(Object obj,List propertyNames,List propertyVales) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
   Class cla=obj.getClass();
   for(int i=0;i<propertyNames.size();i++){
   Field f=cla.getField(propertyNames.get(i).toString());
   f.set(obj, propertyVales.get(i));
   }
}
public List getPropertyNames(Class cla){
   List list=new ArrayList();
   Field[] fs=cla.getDeclaredFields();
   //fs=cla.getFields();加了这个的话就只获得public 公有的
   for (Field f : fs) {
    list.add(f.getName());
   }
   return list;
}

}
//输出:

10
my name
id
stuName
10my name

//从上面的例子我觉得我们可以利用反射来简化struts(Action)中对数据库插入的操作人们可以写一个方法impl.save(StuBean.class,request);

如此种用反射从request中得到页面的值,可从StuBean中得到属性,然后利用反射配起来。忧点可以避免写重复的Bean.setXxx().....

可以这样三步解决:

StuBean stu=new StuBean();

impl.save(stu,request);

dao.save(stu);//hibernate DAO 或Spring DAO

//如果实体bean是私有的,用这个代替上面的方法

public void method(Object obj,List propertyNames,List propertyVales) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
   Class cla=obj.getClass();
   for(int i=0;i<propertyNames.size();i++){
   Field f=cla.getDeclaredField(propertyNames.get(i).toString());
   f.setAccessible(true);//加了这句才能改私有的值
   f.set(obj, propertyVales.get(i));
   }
}


分享到:
评论

相关推荐

    Java反射应用实例

    代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...

    java反射实例代码

    在提供的"java反射实例代码"中,应该包含了如何使用上述方法的实际示例,这些示例有助于加深对Java反射机制的理解。通过阅读和运行这些代码,开发者可以更直观地学习如何在程序运行时动态地操作类、方法和字段,从而...

    java 反射实例,大量注释,简单易懂

    Java反射是Java编程语言中的一个重要特性,它允许程序在...学习这个示例,你可以更好地掌握Java反射机制,如何实例化对象,调用方法以及访问字段。通过实践,你将能够灵活地应用反射到实际项目中,解决动态编程的需求。

    Java 8个反射实例

    以下将详细介绍Java反射的8个关键实例。 1. 获取Class对象 要使用反射,首先需要获取到目标类的Class对象。这可以通过以下几种方式实现: - 使用`Class.forName()`方法,如`Class&lt;?&gt; clazz = Class.forName("全...

    Java反射简单小实例

    ### Java反射机制简介 Java反射机制是Java编程语言的一个强大特性,它允许程序在运行时检查自身,并且能够“看”到类的信息(字段、方法等),甚至可以在运行时调用这些方法或修改这些字段的值。这为开发带来了很大...

    java反射应用实例

    在标题“Java反射应用实例”中,我们关注的是如何在实际项目中利用反射来实现特定的功能。这篇博客文章(可以通过链接访问)可能会探讨以下几个方面: 1. **什么是反射**:首先,我们需要理解反射的基本概念。反射...

    Java 反射机制实例详解

    Java 反射机制实例详解 Java 反射机制实例详解是一种动态语言机制,允许在程序运行时加载、探知和使用编译期间完全不知道的类、生成其对象实体,调用其方法或者对属性设值。下面是 Java 反射机制实例详解的知识点:...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    在Java中使用反射API的一个实例

    下面我们将深入探讨如何利用Java反射API实现这些功能。 首先,要使用反射API,我们需要导入`java.lang.reflect`包中的几个关键类:`Class`、`Constructor`、`Method`和`Field`。这些类分别代表类对象、构造器对象、...

    java反射实例

    在标题“Java反射实例”中,我们聚焦于如何在实际编程中应用这一特性。通过反射,我们可以动态地获取类的信息,如类名、方法名、字段名,甚至可以在运行时创建和调用对象。这对于实现元编程、插件系统、序列化、单元...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    反射实例-JAVA反射机制.doc

    Java 反射机制详解 Java 反射机制是 Java 语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。这种能力使得 Java 应用程序更加灵活,能够在运行时发现和修改自身...

    Java反射机制的详细讲解及实例,有助于java深度开发

    三、Java反射实例 1. 创建对象:通过`Class.newInstance()`创建默认构造器的对象,或`Constructor.newInstance()`创建指定构造器的对象。 ```java Class&lt;?&gt; clazz = Class.forName("com.example.MyClass"); MyClass ...

    Java反射实例

    以下是对"Java反射实例"的详细解释: 1. **获取Class对象** 要使用反射,首先需要获取到对应的`Class`对象。这可以通过以下三种方式实现: - 使用`Class.forName()`方法,传入类的全名(包括包名)。 - 对象的`...

    java源码包实例源码JAVA开发源码55个合集.zip

    java源码包J实例源码JAVA开发源码55个合集: Java中的Blowfish对称密钥加密算法类和实例.rar Java中的EJB编程实例代码.rar Java中的SSL及HTTPS协议实例源码.rar Java写的ATM机取款模拟程序.zip Java写的一个mp3播放器...

    JAVA反射机制实例教程

    本实例教程分反射对成员变量、构造器、方法操作,详尽而简略得列出反射机制的应用,希望对大家有用。

    java反射实例.

    在标题和描述中提到的"java反射实例"是一个简单的入门程序,旨在演示如何使用反射来操作JavaBean的get和set方法。 首先,让我们理解JavaBean。JavaBean是一种符合特定规范的Java类,通常具有公有的getter和setter...

    Java反射性能测试分析

    ### Java反射性能测试分析 #### 引言 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的...

    Java反射和动态代理实例

    几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...

Global site tag (gtag.js) - Google Analytics