Java内省技术

Java的内省技术与反射技术关系密切,内省机制是通过反射来实现的。

常用类:BeanInfo, Introspector,PropertyDescriptor,Class,Method,Field,Constructor等


(1)根据JavaBean对象,获取或修改属性
根据JavaBean对象,以及属性名,构造出PropertyDescriptor对象,
通过PropertyDescriptor对象的getWriteMethod(),getReadMethod()
方法或者Method反射对象,调用其invoke方法修改或者获取对象的属性值

public static void getProperty(UserInfo userInfo,String userName)throws Exception{  
PropertyDescriptor proDescriptor = new PropertyDescriptor(userName,UserInfo.class);  
Method methodGetUserName=proDescriptor.getReadMethod();  
Object objUserName=methodGetUserName.invoke(userInfo);  
System.out.println("get userName:"+objUserName.toString());  
}

(2)通过Introspector,BeanInfo来获取或修改属性
根据Introspector的静态方法getBeanInfo,传入JavaBean的class对象,
得到BeanInfo对象,再根据BeanInfo的getPropertyDescriptors方法得到PropertyDescriptor数组,
遍历该数组,根据PropertyDescriptor的getName()方法得到的属性与要访问的属性进行匹配,
如果匹配上,调用PropertyDescriptor的getWriteMethod(),getReadMethod()
方法或者Method反射对象,调用其invoke方法修改或者获取对象的属性值

(3)导入第三方jar包,使用BeanUtils,PropertyUtils来访问或修改属性
BeanUtils工具包:下载:http://commons.apache.org/beanutils/ 
注意:应用的时候还需要一个logging包http://commons.apache.org/logging/

BeanUtils.setProperty()
BeanUtils.getProperty()
PropertyUtils.setProperty()
PropertyUtils.getProperty()
这两个工具设置属性的时候一个主要区别是:
PropertyUtils.getPropety方法获得的属性值的类型为 该属性本来的类型,
而BeanUtils.getProperty则是将该属性的值转换成字符串后才返回。



猜你喜欢

转载自blog.csdn.net/u012989337/article/details/78494098