最近在封裝一個數據訪問框架的時候,用到了很多反射獲取實體值的方法。
最開始采用的是BeanUtils.describe(bean) ,但在插入數據庫的經常報數據類型錯誤的異常。看了下源碼,BeanUtils調用的是BeanUtilsBean的這個getNestedProperty方法,該方法在讀取值之后,會再調用一次(getConvertUtils().convert(value));,進行類型轉化成String。 因此BeanUtils.describe轉化出來的Map的value都是String。
經過查閱,可以采用PropertyUtils類,調用PropertyUtils.describe(bean)方法。
這兩個方法,基本上實現原理類似,內部代碼很多都相同的,但在讀取bean的某個屬性的時候都是調用的某個類的getNestedProperty(bean, name)方法。其實主要的區別就在這個方法中,PropertyUtils是調用的PropertyUtilsBean的這個方法,該方法讀取屬性值(調用getXxx方法)之后,value不做轉化 。