内省(javaBean)

来源:互联网 发布:数据分析平台架构 编辑:程序博客网 时间:2024/05/29 11:51

内省----javaBean

                   利用javaBean来获得某个sioux变量的值

                   ReflectPointpt1 = new ReflectPoint(3,4);

                   StringpropertyName = "x";

                   得到属性描述对象(属性名,javaBean类);javaBean类用字节码对象表示

                   PropertyDescriptorpd = new PropertyDescriptor(propertyName,pt1.getClass());

                   MethodmethodGetX = pd.getReadMethod();//得到get方法

                   ObjectretVal = methodGetX.invoke(pt1);

                  

                   MethodmethodSetX = pd.getWriteMethod();//得到set方法

                   methodSetXinvoke(pt1,5);

                  

           第二种方法获得javaBean中的信息

                            根据对象获取该对象的javaBean信息

                            BeanInfobeanInfo = Introspector.getBeanInfo(pt1.getClass());

                            根据Bean信息对象获取属性集合

                            PropertyDescriptor[]pds = beanInfo.getPropertyDescriptor();

                            Objectretval = null;

                            for(PropertyDescriptorpd:pds){

                                     if(pd.getName().equals(propertyName)){//找到属性

                                               MethodmethodGetX = pd.getReadMethod()

                                               retval = methodGetX.invoke(pt1);

                                               break;

                                     }

                            }

      Beanutils工具包

                   得到bean对象中,属性为name的值

                   BeanUtils.getProperty(bean,name);

                   bean对象的name属性设置value

                   BeanUtils.setProperty(bean,name, value);

                  

                   例如

                   classTest(){

                            privateDate d = new Date()//必须new

                            publicDate getDate(){

                                     retrund;

                            }

                            publicvoid setDate(Date d){

                                     this.d  = d;

                            }

                   }

                   由于d是一个复合属性。

                  

                   BeanUtils.setProperty(newTest(), "d.time", "111");

                   BeanUtils是以字符串对javaBean操作

                   PropertyUtils是以对应类型对javaBean操作

                   PropertyUtils.setProperty(pt1,"x", 4);

                   PropertyUtils.getProperty(pt1,"x").getClass().getName();java.lang.Integer

                   BeanUtils.getProperty(pt1,"x").getClass().getName();java.lang.String