标签:
一、初识JavaBean
什么叫做JavaBean呢?
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。特殊之处在
如下边的Students就是一个JavaBean类:
public class Students { private String name; private String sex; private double grades; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public double getGrades() { return grades; } public void setGrades(double grades) { this.grades = grades; } }
一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。
所有的类都继承与Object,Object类中有getClass方法,所有上面也有一个class属性。
二、内省操作JavaBean的属性
什么事内省?
内省是Java语言对Bean类属性、事件的一种缺省处理方法。例如:Students类中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了 一套API用来访问某个属性的getter/setter方法,通过这些API可以使你不需要了解这个规则,这些API存放于包java.beans中。一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器 (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来 调用这些方法。
PartI、某个对象的所有属性名称都打印出来
/*某个对象的所有属性名称都打印出来 * * 1、连同父类的属性值也打印出来。(就像Students类,打印四个属性grades、name、sex、class,包括一个Object的一个class属性) * * public static BeanInfo getBeanInfo(Class<?> beanClass) throws IntrospectionException * * 2、只打印该类的属性,父类的属性不打印 (就像Students类,只打印三个属性grades、name、sex * * public static BeanInfo getBeanInfo(Class<?> beanClass,Class<?> stopClass throws IntrospectionException * */ public static void test1() throws IntrospectionException{ BeanInfo info= Introspector.getBeanInfo(Students.class,Object.class); PropertyDescriptor[] pds=info.getPropertyDescriptors(); for(PropertyDescriptor pd:pds){ System.out.println(pd.getName()); } }
PartII、操作对象的某个属性:
/* * 1、通过PropertyDescriptor来获得一个属性的 PropertyDescriptor * PropertyDescriptor(String propertyName, Class<?> beanClass) * * 2、通过PropertyDescriptor对象的方法 * getPropertyType() 获得属性的 Class 对象 * getReadMethod() 获得应该用于读取属性值的方法。 * getWriteMethod() 获得应该用于写入属性值的方法。 */ public static void test2() throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{ Students p=new Students(); PropertyDescriptor pd=new PropertyDescriptor("grades",Students.class); System.out.println(pd.getPropertyType()); Method method=pd.getWriteMethod(); method.invoke(p, 60); System.out.println(p.getGrades()); method=pd.getReadMethod(); System.out.println(method.invoke(p, null)); }
三、使用BeanUtils工具包来操作JavaBean类。
请下载下边的工具包:
标签:
原文地址:http://www.cnblogs.com/lyjs/p/4854725.html