很多主流框架都使用了反射技术.像ssh框架都采用两种技术 xml做配置文件+反射技术.
[b]与反射有关的类包.[/b]
java.lang.reflect.*;和java.lang.Class;
Java中所有类型(包括基本类型)都对应一个Class对象,这个Class就是java.lang.Class。即每一个类型,在Class中都有一个Class对象跟它对应.Class 没有公共构造方法。注意不是没有,是没有公共的.
[b]如何获得Class对象
[/b]
DennisIT@163.com 代码如下:
package org.dennisit.reflect.main;
import java.lang.reflect.Field;
/**
*
* ReflectEx.java
*
* @version : 1.1
*
* @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a>
*
* @since : 1.0 创建时间: 2013-2-26 下午01:46:00
*
* TODO : class ReflectEx.java is used for ...
*
*/
public class ReflectEx {
public static void main(String[] args)throws Exception {
Class cls = Class.forName("org.dennisit.reflect.entity.User");
Object obj = cls.newInstance(); //创建User的对象
Field f = cls.getDeclaredField("test"); //获取test属性
f.setAccessible(true); //打开私有属性test的访问权限
f.set(obj, "zhangsan"); //为test重新复制
System.out.println(f.get(obj)); //获取obj的test属性值
//根据方法名execute获取方法
java.lang.reflect.Method m = cls.getMethod("execute", String.class, int.class);
m.invoke(obj, "dennisit",23); //调用execute方法
}
}
运行效果
DennisIT@163.com 代码如下:
package org.dennisit.reflect.entity;
import java.io.Serializable;
/**
*
* User.java
*
* @version : 1.1
*
* @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a>
*
* @since : 1.0 创建时间: 2013-2-26 下午01:43:56
*
* TODO : 实体类
*
*/
public class User implements Serializable{
private String name;
private int age;
private String email;
public User() { //必须有无参构造
}
//getter() and setter()
}
主测试类
DennisIT@163.com 代码如下:
dennisit,22,dennisit@163.com