Java反射机制

来源:互联网 发布:知乎用户 月薪 编辑:程序博客网 时间:2024/04/30 01:13
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射在Java中的运用可谓是满地皆是,最典型的就是我们所熟悉的各种ORM框架了,SQL查出来的数据映射成一个Pojo对象,Pojo对象转换成SQL,Spring中实现AOP也用到反射等等。
下面来做一个简单的ORM映射,我们这里使用Map代替SQL查出来的数据。
package test;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Map;public class ReflectTest {public static void main(String[] args) throws Exception {Map sqlResult = new HashMap();sqlResult.put("name", "张三");sqlResult.put("age", 25);String pojoClassName = "test.Man";Class c = Class.forName(pojoClassName);Method[] methods = c.getDeclaredMethods();Object o = c.newInstance();//根据方法名for(Method m:methods){if(m.getName().matches("set[0-9a-zA-Z_]*")){String name = m.getName().replaceFirst("set", "");name = (name.substring(0,1).toLowerCase()).concat(name.substring(1));m.invoke(o, sqlResult.get(name));}}System.out.println(o);//根据字段名Field[] fields= c.getDeclaredFields();Object o2 = c.newInstance();for(Field f:fields){f.setAccessible(true);String name = f.getName();Object value = sqlResult.get(name);f.set(o2, value);}System.out.println(o2);}}class Man{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "name:"+name+"\n"+"age:"+age;}}

运行结果:

0 0
原创粉丝点击