Apache|Apache.commons.BeanUtils常用使用方法

【简介】

  • BeanUtils是一种方便我们对JavaBean进行操作的工具类,是Apache组织下的产品。
  • 注意:在实际开发过程中应优先选择spring框架自带的BeanUtils,这样就可以避免过多的引入不必要的maven依赖(同理的还有spring框架自带的StringUtils)
【maven依赖】
commons-beanutils commons-beanutils 1.9.4

【API介绍】
/** * 把orig对象copy到dest对象中.实际开发中尽量避免使用。 * CommonsBeanUtils主要有以下几个耗时的地方:输出了大量的日志调试信息,重复的对象类型检查。 * * @param dest 目标实例 * @param orig 被复制实例 */ public static void copyProperties(Object dest, Object orig) {}// 把map里面的值放入bean中 public void populate (Object bean, Map map)

/** * 复制一个对象 * * @param bean 实例对象 * @return */ public static Object cloneBean(Object bean) {}

/** * 把Bean的属性值放入到一个Map里面 * * @param bean 实例对象 * @return */ public static Map, String> describe(Object bean){}

/** * 设置Bean对象中名称为name的属性值赋值为value. * * @param bean实例对象 * @param name属性名称 * @param value 属性值 */ public static void setProperty(Object bean, String name, Object value) {}

/** * 取得bean对象中名为name的属性的值 * * @param bean 实例对象 * @param name 属性名称 * @return */ public static String getProperty(Object bean, String name) {}

/** * 以String数组形式返回指定bean的指定array属性的值。 * * @param bean 实例对象 * @param name 属性名称 * @return */ public static String[] getArrayProperty(Object bean, String name) {}

/** * 返回指定bean的指定简单属性的值,将其转换为String,如果是list或者数组,返回第一个元素的值 * * @param bean 实例对象 * @param name 属性名称 * @return */ public static String getSimpleProperty(Object bean, String name) {}

/** * 以String形式返回指定bean的指定索引属性的值,该属性为一个数组或List。否则会抛IllegalArgumentException * * @param bean 实例对象 * @param name 属性名称,如 name[0] * @return */ public static String getIndexedProperty(Object bean, String name) {}

/** * 以String形式返回指定bean的指定索引属性的值,该属性为一个数组或List。否则会抛IllegalArgumentException * @param bean 实例对象 * @param name 属性名称 * @param index 索引位置 * @return */ public static String getIndexedProperty(Object bean, String name, int index){}

/** * 以String形式返回指定bean的指定索引属性的值。属性类型必须为map,否则会抛IllegalArgumentException * * @param bean 实例对象 * @param name 属性名称,如contactDetails(2). * @return */ public static String getMappedProperty(Object bean, String name) {}

/** *以String形式返回指定bean的指定索引属性的值。属性类型必须为map,否则会抛IllegalArgumentException * @param bean 实例对象 * @param name 属性名称,如contactDetails. * @param key 索引名称,必须为字符串 * @return */ public static String getMappedProperty(Object bean, String name, String key){}

测试代码
public class BeanUtilsDemo { public static void main(String[] args) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException { User user = new User(); user.setFather("zhang jack"); user.setMother("zhao jack"); BeanUtils.setProperty(user, "name", "Jack"); BeanUtils.setProperty(user, "id", 21); String name = BeanUtils.getProperty(user, "name"); System.out.println("赋值后的对象:" + user); User user1 = (User) BeanUtils.cloneBean(user); System.out.println("cloneBean对象" + user1); Map, String> describe = BeanUtils.describe(user); Set> entries = describe.entrySet(); Iterator> iterator = entries.iterator(); while (iterator.hasNext()) { Map.Entry, String> next = iterator.next(); String key = next.getKey(); String value = https://www.it610.com/article/next.getValue(); System.out.println(key +"=" + value); }describe.put("testKey", "testValue"); User user2 = new User(); BeanUtils.populate(user2, describe); System.out.println("populate后的对象:" + user2); //describe.clear(); User user3 = new User(); describe.remove("id"); BeanUtils.populate(user3, describe); System.out.println(user3); User user4 = new User(); BeanUtils.copyProperties(user4, user); System.out.println(user4); String[] names = BeanUtils.getArrayProperty(user, "name"); for (String item : names) { System.out.println(item); }String[] subject = {"生物", "语文", "数学", "英语", "地理"}; user.setSubject(subject); String[] subjects = BeanUtils.getArrayProperty(user, "subject"); for (String item : subjects) { System.out.println(item); }String subjectName = BeanUtils.getSimpleProperty(user, "name"); System.out.println(subjectName); subjectName = BeanUtils.getSimpleProperty(user, "subject"); System.out.println(subjectName); subjectName = BeanUtils.getIndexedProperty(user, "subject[0]"); System.out.println(subjectName); subjectName = BeanUtils.getIndexedProperty(user, "subject", 1); System.out.println(subjectName); Map, String> contactDetails = Maps.newHashMap(); contactDetails.put("1", "13550124568"); contactDetails.put("2", "13550124567"); contactDetails.put("3", "13550124566"); contactDetails.put("4", "13550124565"); user.setContactDetails(contactDetails); String mappedProperty = BeanUtils.getMappedProperty(user, "contactDetails(2)"); System.out.println(mappedProperty); mappedProperty = BeanUtils.getMappedProperty(user, "contactDetails", "1"); System.out.println(mappedProperty); } }

@Data @ToString(callSuper = true) public class User extends Parent{private Integer id; private String name; private String[] subject; private Map,String> contactDetails; }

@Data public class Parent {private String father; private String mother; }

    推荐阅读