javabean的一部分可以看做是对数据的封装,其向外暴露出数据的getter/setter方法,
用框架开发时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。
内省访问JavaBean属性的方式:
通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器(PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。如下:
//获取bean的信息
//BeanInfo beaninfo = Introspector.getBeanInfo(Student.class);
//如果不想从父类中也获取父类的属性那么使用如下:
//Introspector.getBeanInfo(beanClass, stopClass)
//stopClass代表不用从父类获取,object有一个class的属性
BeanInfo beaninfo = Introspector.getBeanInfo(Student.class,Object.class);
//获取属性描述器
PropertyDescriptor[] propertys = beaninfo.getPropertyDescriptors();
//获取属性描述器有 getWriteMethod();找到setXxx方法 getReadMethod();找到getXxx方法
PropertyDescriptor[] propertys = bininfo.getPropertyDescriptors();
for (PropertyDescriptor pd : propertys) {
System.out.println("属性名称" + pd.getName());
System.out.println("属性DisplayName"+ pd.getDisplayName());
System.out.println("属性类型" + pd.getPropertyType());
System.out.println("属性set"+ pd.getWriteMethod().invoke(ps, "yetong"));
System.out.println("属性get"+ pd.getReadMethod().invoke(ps, null));
System.out.println("**************************************************");
}
然后通过Method类.invok((Object obj, Object... args))操作Bean的属性