PropertyDescriptor类 初接触

来源:互联网 发布:阿里巴巴双十一数据 编辑:程序博客网 时间:2024/06/06 07:42
用到的场景:在写推送MQ消息的时候,想一个sendMessage 类去 推送不同的 队列名。
首先用一个Constant类存放了不同的MQ的推送的队列名字 是用@value注入的,里面有多个队列名字,其实对应着这个Constant不同的属性。现在就是将这些队列名字对应的属性通过一个键值(可以在数据库中加个字段,也可以前端交互)存放到一个Map中去,在调用这个类的时候,循环map取出队列名对应的 属性名字的字符串(注意,这里是属性名字的字符串,并不是这个属性的值)。所以就要用到反射机制的PropertyDescriptor去根据这个属性名字的字符串去得到属性的值(这里就是要推送的队列名)

一、一个简单的PropertyDescriptor类的例子

packagetestPoi;
importjava.beans.PropertyDescriptor;
importjava.lang.reflect.Method;
publicclass TestPropertyDescriptor {
     publicstatic void main(String[]args) {
          Personperson = newPerson();
          person.setName("zhangsan");
          person.setAge(18);
          getFiled(person,"name");//结果输出 zhangsan
     }
     
     // 通过反射得到name 
     // 可以看到这是通过 得到 属性的get方法(pd.getReadMethod()) 再调用invole方法取出对应的属性值
     //同样得到set方法(pd.getWriteMethod()
     privatestatic void getFiled(Objectobject, Stringfield) {
          Class<?extendsObject> clazz  = object.getClass();
          PropertyDescriptorpd = null;
          MethodgetMethod = null;
          try{
              pd= new PropertyDescriptor(field,clazz);
              if(null!= pd) {
                   // 获取  这个 field 属性 的get方法
                   getMethod= pd.getReadMethod();
                   Objectinvoke = getMethod.invoke(object);
                   System.out.println(invoke);
              }
          }catch (Exception e) {
              e.printStackTrace();
          }
          
     }
}
原创粉丝点击