首先我们要知道什么是javabean,而属性指的是什么 ?
javabean可以理解是一种规范,编码要有一定的规范,不然别人很难维护你的代码
属性就是一个类中的getter setter方法,(狭义理解)。如果一个成员变量有getter setter方法,我们
可以说这个成员变量就是属性。
属性是如何自省的?
自省,听起来跟 反射的自省差不多,其实很相似。大家都是通过字节码来映射出自身的元素!
反射映射出整个类,属性自省就映射出属性的全部,就是名字,getter 和setter 方法
自省用Introspector 类来描述,自省这个功能 ,能把 自己的属性打包好拿,得到一个BeanInfo接口的实例
BeanInfo info = Introspector.getBeanInfo(Person.class,Object.class)
因为要自省,所以要加入自己的字节码,后面的是父类字节码,如果不加,父类的属性class也会获取到!
最好不要,因为没有,而且拿了有时会出现很多问题
得到的BeanInfo还不能直接用,因为里面有很多属性打包在一起,我要用要属性描述器PropertyDescriptor
这个描述器可以把一个属性的信息出拿出来,
PropertyDescriptor [ ] pds = info.PropertyDescriptors( );
循环迭代,把每个属性的描述器拿出来
得到后,就可以获取属性的东西
Method m = pd.getWriteMethod( ); 相当于getter方法
Method m1 = pd.getReadMethod ( ); 相当于setter方法
String name = pd.getName ( );
网友评论