根据属性名和类Class得到数据
import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Introspector的使用 * @author 流浪鱼 * */ public class IntrospectorDemo { /** * @param args */ public static void main(String[] args) throws IllegalArgumentException, IntrospectionException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { 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 27 /*使用BeanUtils工具包操作JavaBean org.apache.commons.beanutils.BeanUtils 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); */ } /** * * @param clazz * @param propertyName * @return * @throws IntrospectionException * @throws InvocationTargetException * @throws IllegalAccessException * @throws IllegalArgumentException */ private static Object getProperty(Object clazz, String propertyName) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{ /*方法1 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; } /** * 设置属性 * * @param clazz 对象名 * @param propertyName 属性名 * @param value 属性值 */ private static void setProperty(Object clazz, String propertyName, Object value) throws IntrospectionException,IllegalAccessException, InvocationTargetException{ //方法一 /*PropertyDescriptor pd=new PropertyDescriptor(propertyName, clazz.getClass()); Method methodSet=pd.getWriteMethod(); methodSet.invoke(clazz, value);*/ //方法二 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; } } } }
/** * IntrospectorDemo测试需要的JavaBean * @author 流浪鱼 * */ public class UserInfo { private String userName; private String pwd; public UserInfo(String userName, String pwd) { super(); this.userName = userName; this.pwd = pwd; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }