首先我們要知道什么是javabean骂远,而屬性指的是什么 囚霸?
javabean可以理解是一種規(guī)范,編碼要有一定的規(guī)范激才,不然別人很難維護(hù)你的代碼
屬性就是一個類中的getter setter方法拓型,(狹義理解)额嘿。如果一個成員變量有g(shù)etter setter方法,我們
可以說這個成員變量就是屬性吨述。
屬性是如何自省的岩睁?
自省,聽起來跟 反射的自省差不多揣云,其實(shí)很相似捕儒。大家都是通過字節(jié)碼來映射出自身的元素!
反射映射出整個類邓夕,屬性自省就映射出屬性的全部刘莹,就是名字,getter 和setter 方法
自省用Introspector 類來描述焚刚,自省這個功能 点弯,能把 自己的屬性打包好拿,得到一個BeanInfo接口的實(shí)例
BeanInfo info = Introspector.getBeanInfo(Person.class,Object.class)
因?yàn)橐允】蠊荆砸尤胱约旱淖止?jié)碼抢肛,后面的是父類字節(jié)碼,如果不加碳柱,父類的屬性class也會獲取到捡絮!
最好不要,因?yàn)闆]有莲镣,而且拿了有時會出現(xiàn)很多問題
得到的BeanInfo還不能直接用福稳,因?yàn)槔锩嬗泻芏鄬傩源虬谝黄穑乙靡獙傩悦枋銎鱌ropertyDescriptor
這個描述器可以把一個屬性的信息出拿出來瑞侮,
PropertyDescriptor [ ] pds = info.PropertyDescriptors( );
循環(huán)迭代的圆,把每個屬性的描述器拿出來
得到后,就可以獲取屬性的東西
Method m = pd.getWriteMethod( ); 相當(dāng)于getter方法
Method m1 = pd.getReadMethod ( ); 相當(dāng)于setter方法
String name = pd.getName ( );