Apache.commons.BeanUtils常用使用方法

【简介】

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

【maven依赖】

<dependency>
     <groupId>commons-beanutils</groupId>
     <artifactId>commons-beanutils</artifactId>
     <version>1.9.4</version>
</dependency>

【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, 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, String> describe = BeanUtils.describe(user);
        Set<Map.Entry<String, String>> entries = describe.entrySet();
        Iterator<Map.Entry<String, String>> iterator = entries.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> next = iterator.next();
            String key = next.getKey();
            String value = 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, 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,String> contactDetails;
}
@Data
public class Parent {

    private String father;

    private String mother;
}

你可能感兴趣的:(Apache,Commons)