内省Introspector(反射操作javaBean)

一:内省是一种特殊的反射,来更方便的操作javaBean对象,通过内省可以获取到类字节码的描述器,

然后解剖每一个字段,获取每个字段的读写方法,即get/set方法的反射,然后获取或者是封装bean的value

下面是通过内省向Bean中set值得示例:

public static <T> T toBean(T t){
		Class<?> clazz = t.getClass();
		try {
			//根据Class对象获取该类的BeanInfo信息
			BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
			//根据BeanInfo获取该类中每一个字段的描述器
			PropertyDescriptor[] props = beanInfo.getPropertyDescriptors();
			//遍历描述器,获取每个字段的名称以及写方法(set方法),然后将value值set入bean中
			for(PropertyDescriptor property:props){
				String field = property.getName();
				if(EXCLUDE_FIELD.equals(field)){
					continue;
				}
				Method method = property.getWriteMethod();
				method.invoke(t,getCode(field));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return t;
	}

整个测试案例如下:

 1 /**
 2  *
 3  */
 4 package com.hlcui.test;
 5
 6 import java.beans.BeanInfo;
 7 import java.beans.Introspector;
 8 import java.beans.PropertyDescriptor;
 9 import java.lang.reflect.Method;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 import com.hlcui.entity.Person;
14
15 /**
16  * @author Administrator
17  *
18  */
19 public class TestCase {
20
21     public static Map<String,Object> codeMap = new HashMap<String,Object>();
22
23     private static final String EXCLUDE_FIELD = "class";
24
25     //静态代码块加载静态资源
26     static{
27         codeMap.put("id",1);
28         codeMap.put("name", "jack");
29         codeMap.put("salary",14000);
30     }
31
32     public static void main(String[] args){
33         Person person = toBean(new Person());
34         System.out.println(person);
35     }
36
37     public static <T> T toBean(T t){
38         Class<?> clazz = t.getClass();
39         try {
40             //根据Class对象获取该类的BeanInfo信息
41             BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
42             //根据BeanInfo获取该类中每一个字段的描述器
43             PropertyDescriptor[] props = beanInfo.getPropertyDescriptors();
44             //遍历描述器,获取每个字段的名称以及写方法(set方法),然后将value值set入bean中
45             for(PropertyDescriptor property:props){
46                 String field = property.getName();
47                 if(EXCLUDE_FIELD.equals(field)){
48                     continue;
49                 }
50                 Method method = property.getWriteMethod();
51                 method.invoke(t,getCode(field));
52             }
53         } catch (Exception e) {
54             e.printStackTrace();
55         }
56         return t;
57     }
58
59     public static Object getCode(String field){
60         return codeMap.get(field);
61     }
62 }
时间: 2024-11-02 01:19:10

内省Introspector(反射操作javaBean)的相关文章

[新手学Java]使用内省(Introspector)操作JavaBean属性

获取类bean中的所有属性: @Test //获取类bean中的所有属性 public void test1() throws Exception{ BeanInfo info = Introspector.getBeanInfo(Person.class); PropertyDescriptor[] decriptors = info.getPropertyDescriptors(); for(PropertyDescriptor decriptor : decriptors){ //输出属性

JavaBeans与内省(Introspector)

JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大.    现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的代码.    但是以后学面向抽象编程的时候,即:我们所写的代码完全抽象,比如我们写的框架所要面向的类或方法目前并没有的,而是以后别人用我们的框架写出来的类.但是我们又怎么调用去他们的类get/set方法呢?所以这个时候要用到反射和内省进行抽象编程. /* JavaBean与内省(Introspect

内省(introspector)------&gt;JavaBean

内省(introspector)------>JavaBean    1.问什么要学内省?        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于麻烦,所以SUN        公司开发了一套API,专门操作Java对象的属性    2.什么是JavaBean和属性的读写方法?    3.通过内省技术访问(Java.beans包提供了内省的API)JavaBean的两张方式        贱人 小婊砸 矫情 &.通过introspector类获

Java 内省 Introspector

操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 public class Person { private String name ; private String password; private int age; public String getName() { return name; } public void setName(String

内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

java内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得 Java JDK中提供了一套 API 用来访

深入理解Java:内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

Java:内省(Introspector)深入理解

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

Java:内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信 息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”.方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如UserInfo public class UserInfo {