BeanUtils
BeanUtils是Apache-Commons項(xiàng)目提供的另一個(gè)非常方便的類庫(kù),通過這個(gè)類庫(kù)能夠更方便的使用反射。最常用的類是BeanUtils(org.apache.commons.beanutils包中),使用這個(gè)類能通過名字訪問一個(gè)Bean中的某個(gè)屬性。
通過BeanUtils.getProperty(person,”age”)能得到person的age屬性。此方法還支持內(nèi)嵌對(duì)象,比如BeanUtils.getProperty(person,”manager.name”)就能得到person的manager屬性的name屬性。還支持List和Map類型的屬性,如下面的語(yǔ)法即可取得Order的顧客列表中第一個(gè)顧客的名字BeanUtils.getProperty(orderBean, "customers[1].name")。?使用BeanUtils.setProperty方法則可以設(shè)置javaBean的屬性值。
ConstructorUtils提供了調(diào)用構(gòu)造函數(shù)的方法,使用public static Object invokeConstructor(Class klass, Object arg)可以直接調(diào)用某個(gè)類的構(gòu)造函數(shù)。
MethodUtils提供了調(diào)用bean方法的方法,使用MethodUtils.invokeMethod(bean, methodName, parameter);可以直接調(diào)用某個(gè)類的某個(gè)方法。
PropertyUtils提供了更詳細(xì)的屬性訪問方法,使用public static Class getPropertyType(Object bean, String name)獲取屬性的Class類型。
UserInfo userInfo = (UserInfo) ConstructorUtils.invokeConstructor(
????UserInfo.class, new Object[] {});
PersonInfo personInfo = (PersonInfo) ConstructorUtils
????.invokeConstructor(PersonInfo.class, new Object[] {});
BeanUtils.setProperty(personInfo, "age", new Integer(20));
BeanUtils.setProperty(personInfo, "name", "Tom");
BeanUtils.setProperty(userInfo, "number", "admin");
??BeanUtils.setProperty(userInfo, "person", personInfo);
System.out.println(BeanUtils.getProperty(userInfo, "person.name"));
BeanUtils.setProperty(userInfo, "person.name","xdx");
System.out.println(BeanUtils.getProperty(userInfo, "person.name"));
System.out.println(PropertyUtils.getPropertyType(userInfo,"person"));
運(yùn)行結(jié)果:
Tom
xdx
class com.cownew.PIS.basedata.common.PersonInfo