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则是将该属性的值转换成字符串后才返回。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值