zoukankan      html  css  js  c++  java
  • BeanUtils使用

    一、BeanUtils概要

      BeanUtils是由Apache公司所开发的工具包,目的是为了简化数据封装,方便Java程序员对JavaBean类进行简便的操作。

    注意事项

    • 被封装的JavaBean必须是标准的Java类
      1. 该JavaBean必须被public所修饰
      2. 必须提供空构造器
      3. 成员变量必须私有化,被private所修饰
      4. 提供公共的settergetter方法

    1.1BeanUtils工具JAR包

    1. commons-beanutils-*.jar
    1. commons-logging-*.jar

    1.1.1下载beanutils

    选择其中一个下载

    得到一个.gz的压缩包:

    解压.gz的压缩包:

    commons-beanutils-1.9.4.jar引入(复制)到项目lib目录下,右键jar包选择Add as library


    1.1.2下载logging

    commons-logging的下载和导入同理

    下载页面 | commons-logging-1.2下载地址

    进其导入lib目录下:


    1.2关于属性和成员变量

    不少人将属性成员变量混为一谈。在这里简单说明一下两者的异同和联系。

    1. 差异:
    • 成员变量
      简单来说就是定义在方法之间的变量

    • 属性
      在JavaBean中,去掉getset后得到的字符串,将其首字母小写后即为属性。如:getUsername() --> Username --> username, username即为该JavaBean的一个属性。

    1. 联系:

      可能你已经注意到,这个username属性和username成员变量是一样的。这是一般情况(标准)下,实际上,两者的联系是:属性的存在是用于操纵或者获取成员变量的,所以说,相应的settergetter方法可能会不同,即可以使用setAbc(String username)来设置username成员变量,而这里的abc就是属性。

      通常情况下,我们的属性和成员变量的名称是相同的,在没有特殊的要求下,推荐这样的编写方式。


    二、BeanUtils简单使用

    BeanUtils提供了对于JavaBean进行各种操作,比如对象、属性复制等。

      BeanUtils设置属性值的时候,如果属性是基本数据类型,那么BeanUtils会自动帮我们进行数据类型转换,并且BeanUtils设置属性的时候也是依赖于底层的getter和setter方法。如果设置的属性值是其他的引用数据类型,此时必须要注册一个类型转换器才能实现自动的转换(参考下面的ConvertUtils)


    2.1常用方法

    参考文档(英文):解压commons-beanutils-1.9.4.jar后即可得到。

    方法名称 描述信息
    populate(Object bean, Map<String,? extends Object> properties) 根据指定的名称/值对填充指定Bean的JavaBeans属性。
    setProperty(Object bean, String name, Object value) 设置指定属性的值
    copyProperty(Object bean, String name, Object value) 拷贝指定的属性值到指定的bean
    copyProperties(Object dest, Object orig) 对象的拷贝
    cloneBean(Object bean) 对象的克隆

    2.2实例

    创建一个JavaBean类

    pulic class User{
        private String username;
        private String password;
        private Date birthday;
    
        public User(){}
    
        pulic void setUsername(String username){
            this.username = username;
        }
        pulic String getUsername(){
            retrun this.username;
        }
    
        pulic void setPassword(String password){
            this.password= password;
        }
        pulic String getPassword(){
            retrun this.password;
        }
        pulic void setPassword(Date birthday){
            this.birthday= birthday;
        }
        pulic Date getPassword(){
            retrun this.birthday;
        }
    }
    
    1. BeanUtils.populate(Object bean, Map<String,? extends Object> properties)

    根据指定的名称/值对填充指定Bean的JavaBeans属性。

    User user = new User(); // 被封装的JavaBean
    Map<String, String[]> loginUser = request.getParameterMap(); // 封装的数据Map集合
    /* 等价:
     *     Map<String, String> loginUser = new HasheMap<>();
     *     loginUser.put("username","langkye");
     *     loginUser.put("password","admin");
     */
    BeanUtils.populate(user,loginUser);
    System.out.println(user); // 输出:User{username='langkye', password='admin', birthday=null}
    

    1. BeanUtils.setProperty(Object bean, String name, Object value)

    设置指定属性的值

    User user = new User(); // 被封装的JavaBean
    BeanUtils.setProperty(user,"username","langkye"); // 设置username属性
    BeanUtils.setProperty(user,"password","admin"); // 设置password属性
    System.out.println(user); // 输出:User{username='langkye', password='admin', birthday=null}
    

    1. BeanUtils.copyProperty(Object bean, String name, Object value)

    拷贝指定的属性值到指定的bean

    User user1 = new User();
    BeanUtils.copProperties(user1, "username","langkye");
    System.out.println(user1); // 输出:User{username='langkye', password=null, birthday=null}
    

    1. BeanUtils.copyProperties(Object dest, Object orig)

    对象的拷贝

    // 对象的拷贝
    User user2 = new User();
    BeanUtils.copyProperties(user, user2);
    System.out.println(user1); // 输出:User{username='langkye', password='admin', birthday=null}
    

    1. BeanUtils.cloneBean(Object bean)

    对象的克隆

    // 克隆对象
    User user3 = (User)BeanUtils.cloneBean(user);
    System.out.println(user3); // 输出:User{username='langkye', password='admin', birthday=null}
    

    三、ConvertUtils简单使用

    ConvertUtils为类型转换工具类

    ConvertUtils可以使字符串和指定类型的实例之间进行转换。 实际上,BeanUtils是依赖ConvertUtils来完成类型转换,但是有时候我们可能需要自定义转换器来完成特殊需求的类型转换;

    3.1 常用方法

    方法 描述
    convert(Object value, Class<?> targetType) 将给定的value转换成指定的Class类型
    register(Converter converter, Class clazz) 给BeanUtils注册指定类型的转换器

    3.2字符串和Date类型转换

    1. convert(Object value, Class<?> targetType)
    // 将日期转换成字符串
    String DateStr = (String)ConvertUtils.convert(new Date(), String.class);
    System.out.println(DateStr); // Fri May 20 00:00:00 CST 2050
    System.out.println((ConvertUtils.convert(new Date(), String.class)).getClass().getTypeName()); // java.lang.String
    
    1. register(Converter converter, Class clazz)
    Map<String,String> paraMap = new HashMap<>().put("birthday","2050-05-20");
    // 将字符串转换为日期类型
    DateConverter dc = new DateConverter();
    dc.setPattern("yyyy-MM-dd");
    ConvertUtils.register(dc,Date.class);
    BeanUtils.populate(user4,paraMap);
    System.out.println(user4); // User {username=null,password=null,birthday='Fri May 20 00:00:00 CST 2050'}
    

    3.3 字符串和Double

    // 将字符串转换成Double
    Double doubleNumber = (Double)ConvertUtils.convert("2050", Double.class);
    System.out.println(doubleNumber); // 2050.0
    String dn_typeName = doubleNumber.getClass().getTypeName();
    System.out.println(dn_typeName); // java.lang.Double
    
  • 相关阅读:
    iOS中的HTTPS
    HTTPS抓包之Charles
    组件化开发的一些思考
    Xcode 调试技巧
    iOS崩溃日志分析
    iOS依赖库管理工具之Carthage
    13.类的关系总结
    12.组合(Composition)
    11.聚合(Aggregation)
    10.关联(Association)
  • 原文地址:https://www.cnblogs.com/langkyeSir/p/13201381.html
Copyright © 2011-2022 走看看