【java反射之】对javabean内省操作
2014-10-31 18:55
447 查看
内省(Introspector)是Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter/setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中。
一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
package com.oterman.reflect; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 该例子演示内省的简单应用; * 内省就是对javabean的属性进行读写操作; * 两个类:PropertyDesciptor,BeanInfo; * */ public class IntrospectorDemo { public static void main(String[] args) throws IntrospectionException, Exception, IllegalAccessException, InvocationTargetException { ReflectPoint point=new ReflectPoint(2,5); //内省方式读取x的值; PropertyDescriptor pd=new PropertyDescriptor("x",point.getClass()); Method methodGetX=pd.getReadMethod(); Object retVal=methodGetX.invoke(point); System.out.println(retVal); //内省方式改写x的值; PropertyDescriptor pd2= new PropertyDescriptor("y",point.getClass()); Method methodWriteY=pd2.getWriteMethod(); methodWriteY.invoke(point, 88); System.out.println(point.getY()); //BeanInfo方式操作属性值x的值; BeanInfo beanInfo=Introspector.getBeanInfo(point.getClass());//BeanInfo对象包含了javabean对象的所有属性信息; PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors(); for(PropertyDescriptor pd3:pds){ if(pd3.getName().equals("x")){//判断得到的属性是不是x; pd3.getWriteMethod().invoke(point, 99); break; } } System.out.println(point.getX()); } } //用来做反射演示用; class ReflectPoint{ private int x; public int y; public ReflectPoint(int x,int y){ this.x=x; this.y=y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }
相关文章推荐
- Java学习笔记之<反射、内省、BeanUtils包操作JavaBean的对比>
- 黑马程序员--Java基础加强--10.【PropertyDescriptor操作JavaBean VS 反射操作Java类】【个人总结】
- JAVA基础加强之对javaBean的内省简单操作
- java内省 操作javaBean
- Java通过内省操作JavaBean有什么作用?
- 【Java进阶】内省IntroSpector操作JavaBean和Apache-commons-dbutils对内省的使用
- Java基础--对javaBean的简单内省操作
- JavaBean 用反射自己实现简单内省操作 基础
- java高新技术之使用反射和内省对对象的操作
- java中的内省及javabean操作
- 【黑马程序员】java基础加强------------------javabean与内省操作
- 黑马程序员—java基础学习--JavaBean的内省操作
- java基础增强---JavaBean的内省操作
- javaWeb-javaBean+内省机制+模拟Hibernate的CRUD操作
- 内省Introspector(反射操作javaBean)
- java基础巩固系列(八):对javabean的内省操作
- Java 对JavaBean的简单内省操作
- Java 基础加强 - JavaBean与内省操作
- Java中的内省及javabean操作
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)