首先我們要知道什么是javabean,而屬性指的是什么 ?
javabean可以理解是一種規(guī)范,編碼要有一定的規(guī)范,不然別人很難維護你的代碼
屬性就是一個類中的getter setter方法,(狹義理解)。如果一個成員變量有g(shù)etter setter方法,我們
可以說這個成員變量就是屬性。
屬性是如何自省的?
自省,聽起來跟 反射的自省差不多,其實很相似。大家都是通過字節(jié)碼來映射出自身的元素!
反射映射出整個類,屬性自省就映射出屬性的全部,就是名字,getter 和setter 方法
自省用Introspector 類來描述,自省這個功能 ,能把 自己的屬性打包好拿,得到一個BeanInfo接口的實例
BeanInfo info = Introspector.getBeanInfo(Person.class,Object.class)
因為要自省,所以要加入自己的字節(jié)碼,后面的是父類字節(jié)碼,如果不加,父類的屬性class也會獲取到!
最好不要,因為沒有,而且拿了有時會出現(xiàn)很多問題
得到的BeanInfo還不能直接用,因為里面有很多屬性打包在一起,我要用要屬性描述器PropertyDescriptor
這個描述器可以把一個屬性的信息出拿出來,
PropertyDescriptor [ ] pds = info.PropertyDescriptors( );
循環(huán)迭代,把每個屬性的描述器拿出來
得到后,就可以獲取屬性的東西
Method m = pd.getWriteMethod( ); 相當(dāng)于getter方法
Method m1 = pd.getReadMethod ( ); 相當(dāng)于setter方法
String name = pd.getName ( );