对javaBean的一些操作

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class IntrospectorTest {


public static void main(String[] args) throws IllegalArgumentException,
IntrospectionException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException,
NoSuchFieldException, SecurityException {

UserInfo userInfo = new UserInfo("zhangsan", "123456");
String propertyName = "userName";
Object retVal = getProperty(userInfo, propertyName);
System.out.println("retVal=" + retVal); // retVal=zhangsan

Object value = "abc";
setProperty(userInfo, propertyName, value);
retVal = getProperty(userInfo, propertyName);
System.out.println("retVal=" + retVal); // retVal=abc
/*
* //使用BeanUtils工具包操作JavaBean String
* userName=BeanUtils.getProperty(userInfo, propertyName);
* System.out.println("userName="+userName);
* BeanUtils.setProperty(userInfo, propertyName, "linjiqin");
* userName=BeanUtils.getProperty(userInfo, propertyName);
* System.out.println("userName="+userName);
*/
}


private static void setProperty(Object clazz, String propertyName,
Object value) throws IntrospectionException,
IllegalAccessException, InvocationTargetException {
//  通过 PropertyDescriptor
/*
* PropertyDescriptor pd=new PropertyDescriptor(propertyName,
* clazz.getClass()); Method methodSet=pd.getWriteMethod();
* methodSet.invoke(clazz, value);
*/


//  通过 Introspector获取beanInfo信息。然后获取所有 PropertyDescriptor处理
BeanInfo beanInfo = Introspector.getBeanInfo(clazz.getClass());
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if (propertyName.equals(pd.getName())) {
Method methodSet = pd.getWriteMethod();
methodSet.invoke(clazz, value);
break;
}
}
}

private static Object getProperty(Object clazz, String propertyName)
throws IntrospectionException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException,
NoSuchFieldException, SecurityException {
// 方法一
/*
* PropertyDescriptor pd=new PropertyDescriptor(propertyName,
* clazz.getClass()); Method methodGet=pd.getReadMethod(); return
* methodGet.invoke(clazz);
*/


// 方法二
/*
* Object retVal=null; BeanInfo
* beanInfo=Introspector.getBeanInfo(clazz.getClass());
* PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
* for(PropertyDescriptor pd:pds){
* if(propertyName.equals(pd.getName())){ Method
* methodGet=pd.getReadMethod(); retVal=methodGet.invoke(clazz); break;
* } } return retVal;

*/

//通过反射处理

Object retVal = null;
Class c = clazz.getClass();
Field f = c.getDeclaredField(propertyName);
if (!f.isAccessible())
f.setAccessible(true);
retVal = f.get(clazz);
return retVal;
}


}

转载于:https://my.oschina.net/dtpanda/blog/149621

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值