zoukankan      html  css  js  c++  java
  • 对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;
    import java.util.Map;

    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.PropertyUtils;

    public class IntroSpectorTest {

     /**
      * @param args
      */
     public static void main(String[] args) throws Exception {
      // TODO Auto-generated method stub
      ReflectPoint pt1 = new ReflectPoint(3,5);
      
      String propertyName = "x";
      //"x"-->"X"-->"getX"-->MethodGetX-->
      Object retVal = getProperty(pt1, propertyName);
      System.out.println(retVal);
      
      Object value = 7;
      
      setProperties(pt1, propertyName, value);

      System.out.println(BeanUtils.getProperty(pt1, "x").getClass().getName());
      BeanUtils.setProperty(pt1, "x", "9");
      System.out.println(pt1.getX());
      /*
      //java7的新特性
      Map map = {name:"zxx",age:18};
      BeanUtils.setProperty(map, "name", "lhm");
      */
      BeanUtils.setProperty(pt1, "birthday.time", "111");
      System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
      
      PropertyUtils.setProperty(pt1, "x", 9);
      System.out.println(PropertyUtils.getProperty(pt1, "x").getClass().getName());
      
     }

     private static void setProperties(Object pt1, String propertyName,
       Object value) throws IntrospectionException,
       IllegalAccessException, InvocationTargetException {
      PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
      Method methodSetX = pd2.getWriteMethod();
      methodSetX.invoke(pt1,value);
     }

     private static Object getProperty(Object pt1, String propertyName)
       throws IntrospectionException, IllegalAccessException,
       InvocationTargetException {
      /*PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
      Method methodGetX = pd.getReadMethod();
      Object retVal = methodGetX.invoke(pt1);*/
      
      BeanInfo beanInfo =  Introspector.getBeanInfo(pt1.getClass());
      PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
      Object retVal = null;
      for(PropertyDescriptor pd : pds){
       if(pd.getName().equals(propertyName))
       {
        Method methodGetX = pd.getReadMethod();
        retVal = methodGetX.invoke(pt1);
        break;
       }
      }
      return retVal;
     }

    }

  • 相关阅读:
    给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
    把二元查找树转变成排序的双向链表
    动态规划0/1背包问题
    判断一字符串是不是对称的
    动态链接库dll,静态链接库lib, 导入库lib(转载)
    基于格点数据分析和表达
    Silverlight Wcf 获取集合数据并绑定(DataContract,DataMember)
    让你学会使用WCF服务端配置
    数据契约(DataContract)
    symbol详解
  • 原文地址:https://www.cnblogs.com/riskyer/p/3233812.html
Copyright © 2011-2022 走看看