首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JDK与commons-beanutils诀别操作javaBean

2013-01-01 
JDK与commons-beanutils分别操作javaBeanimport java.beans.BeanInfoimport java.beans.IntrospectionExc

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;}}


下载相应jar包和longing包
只用到了里面的一个小功能,这个包功能很多,具体参考包里面的文档
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();} }}

热点排行