JDK与commons-beanutils分别操作javaBean
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;public class BeanUtil {public static void main(String[] args) throws Exception {Dog dog = new Dog(22, "qiqi");String propertyName = "id";Object objId = getPropeties2(dog, propertyName);System.out.println(objId);Object value = 66;setProperties(dog, propertyName, value);System.out.println(dog.getId());}private static void setProperties(Object obj, String propertyName,Object value) throws IntrospectionException,IllegalAccessException, InvocationTargetException {PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());Method methodSetId = pd.getWriteMethod();methodSetId.invoke(obj, value);}private static Object getPropeties(Object obj, String propertyName)throws IntrospectionException, IllegalAccessException,InvocationTargetException {PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());Method methodGetId = pd.getReadMethod();/** * 居然说引起歧义的返回值,抽取不成功,晕~~~一换就OK了 Object objId=methodGetId.invoke(dog); * eclipse在抽取方法这块做得不咋好啊,毕竟抽取不怎么容易 */Object retVal = methodGetId.invoke(obj);return retVal;}//更复杂的一种方式,不建议使用,弄着玩可以private static Object getPropeties2(Object obj, String propertyName)throws IntrospectionException, IllegalAccessException,InvocationTargetException {Object retVal = null;BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());PropertyDescriptor[] pd = beanInfo.getPropertyDescriptors();for (PropertyDescriptor p : pd) {if (p.getName().equals(propertyName)) {Method methodGetId = p.getReadMethod();retVal = methodGetId.invoke(obj);}}return retVal;}}import java.lang.reflect.InvocationTargetException;import org.apache.commons.beanutils.BeanUtils;public class TestBeanUtil {public static void main(String[] args) {Dog dog=new Dog(11,"dahuang");//把里面的值都当做字符串来操作的,这是个好处,web开发来说try {BeanUtils.setProperty(dog, "id", "99");System.out.println(dog.getId());long time=System.currentTimeMillis();//支持级联操作BeanUtils.setProperty(dog, "birthday.time", time+"");System.out.println(dog.getBirthday());} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}