zoukankan      html  css  js  c++  java
  • 内省—beanutils工具包

    Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。

    BeanUtils的作用:

    1)支持String到8种基本数据类型的转换;

    2)其他引用数据类型都需要注册转换器:ConvertUtils.register(Converter,Class);

    public class Person {
        private String name;
        private String password;
        private Integer age;
        private Date birthday;
        getter/setter
    }

    采用beanutils设置属性

    @Test
    public void test1() throws Exception {
        Person person = new Person();
        BeanUtils.setProperty(person, "name", "zhangsan");
        System.out.println(person.getName());
    }

    采用beanutils拷贝对象的属性(基本类型)

    @Test
    public void test2() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换,只支持8种基本数据类型
    
        System.out.println(person);
    }

    采用beanutils拷贝对象的属性(非基本类型)

    @Test
    public void test3() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
        String birthday = "1980-09-05";
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换
        BeanUtils.setProperty(person, "birthday", birthday); // 类型转换失败
        System.out.println(person);
    }

    为让Date能够赋值到birthday属性上,我们给beanutils注册一个日期转换器。

    改进代码如下:

    @Test
    public void test4() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
        String birthday = "1980-09-05";
    
        ConvertUtils.register(new Converter() {
            @Override
            public Object convert(Class type, Object value) {
                if (value == null) {
                    return null;
                }
    
                if (!(value instanceof String)) {
                    throw new ConversionException("只支持String类型的转换!");
                }
    
                String str = (String) value;
                if (null == str || "".equals(str.trim())) {
                    return null;
                }
    
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    return format.parse(str);
                } catch (ParseException e) {
                    throw new ConversionException(e);
                }
            }
    
        }, Date.class);
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换
        BeanUtils.setProperty(person, "birthday", birthday); 
        System.out.println(person);
    }

    采用beanutils自带的日期类型转换器

    @Test
    public void test5() throws Exception {
        String name = "zhangsan";
        String password = "123";
        String age = "34";
        String birthday = "1980-09-05";
    
        ConvertUtils.register(new DateLocaleConverter(), Date.class);
    
        Person person = new Person();
        BeanUtils.setProperty(person, "name", name);
        BeanUtils.setProperty(person, "password", password);
        BeanUtils.setProperty(person, "age", age);// 自动类型转换
        BeanUtils.setProperty(person, "birthday", birthday); 
        System.out.println(person);
    }

    收集数据到map中,并通过beanutils拷贝到指定的对象中去

    @Test
    public void test6() throws Exception {
    
        Person person = new Person();
    
        ConvertUtils.register(new DateLocaleConverter(), Date.class);
    
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "aa");
        map.put("password", "123");
        map.put("age", 23);
        map.put("birthday", "1980-09-05");
    
        // 用map集合中的值,填充bean的属性,
        // 注意:属性名称必须要一致
        BeanUtils.populate(person, map);
    
        System.out.println(person);
    }
  • 相关阅读:
    [Python] 网络
    [c++] 命令
    [DB] 关系型数据库
    [win] cmd 常用命令
    [linux] Git基本概念&操作
    [SQL] 常用命令
    redis(二十四):Redis分布式锁以及实现(python)
    redis(二十三):Redis 集群(proxy 型)二
    redis(二十二):Redis 集群(proxy 型)一
    redis(二十一):Redis 架构模式实现(哨兵)
  • 原文地址:https://www.cnblogs.com/luogankun/p/3991464.html
Copyright © 2011-2022 走看看