BeanUtil工具类是apache commons中的项目

使用BeanUtil除了需要 commons-beanutils-1.8.3.jar 外,可能需要记录错误日志信息,再加入 commons-logging-1.1.3.jar(也是apache的) 即可

下面着重看一些例子

// 实体类User Point,这里就省去get,set方法

package com.yangwei.model;

import java.util.Date;

public class User {

    private String name;
    private int age;
    private Date birth;
    private Point point;
}
public class Point {

    private int x;
    private int y;
}
package com.yangwei.test;

import static org.junit.Assert.fail;

import java.lang.reflect.InvocationTargetException;

import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

import com.yangwei.model.User;

public class TestBeanUtil {

    @Test
    public void test01() {

        try {
            User u=new User();
            //假设要为name设置值"zhangsan"
            String key="name";
            String value="zhangsan";
            //以前我们使用Method 调用它的invoke方法完成操作
            //现在我们使用BeanUtils的copyProperty完成设值操作
            BeanUtils.copyProperty(u, key, value);
            System.out.println(u.getName());//zhangsan

            //拷贝不认识的属性,也不会报错
            BeanUtils.copyProperty(u, "yyy", value);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

}
两个转换器类 ,实现Converter接口

package com.yangwei.model;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

public class DateConverter implements Converter{

    /**
     * 第一个参数表示要转换的类型, 第二个参数表示要转换的值
     * 比如要拷贝一个字符串到日期中,第一个参数就是日期,第二个参数是字符串值
     */
    SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
    @Override
    public Object convert(Class clz, Object obj) {
        if(clz!=Date.class){
            return null;
        }
        try {
            if(obj instanceof String){
                return f.parse((String) obj);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }

}
package com.yangwei.model;

import org.apache.commons.beanutils.Converter;

public class PointConverter implements Converter {

    /**
     * 将传递过来的值转为Point类
     */
    @Override
    public Object convert(Class clz, Object obj) {

        if(clz!=Point.class){
            return null;
        }
        if(obj instanceof String){
            String value=(String)obj;
            String strArr[]=value.split(",");
            if(strArr!=null && strArr.length==2){
                Point point=new Point();
                point.setX(Integer.parseInt(strArr[0]));
                point.setY(Integer.parseInt(strArr[1]));
                return point;
            }
        }
        return null;
    }

}
package com.yangwei.test;

import java.lang.reflect.InvocationTargetException;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.junit.Test;

import com.yangwei.model.DateConverter;
import com.yangwei.model.Point;
import com.yangwei.model.PointConverter;
import com.yangwei.model.User;

public class TestBeanUtil {

    @Test
    public void test01() {

        try {
            User u=new User();
            //假设要为name设置值"zhangsan"
            String key="name";
            String value="zhangsan";
            //以前我们使用Method 调用它的invoke方法完成操作
            //现在我们使用BeanUtils的copyProperty完成设值操作
            BeanUtils.copyProperty(u, key, value);
            System.out.println(u.getName());//zhangsan

            //拷贝不认识的属性,也不会报错
            BeanUtils.copyProperty(u, "yyy", value);
            /**
             * 完整拷贝一个对象,此时会有错误,因为它不知道将Date转为何种类型
             * 日期是有很多中格式情况的,如 1977-10-10 1977/10/10等
             * 此时,如何处理呢???
             * 需要定义转换器  定义转换器的步骤:
             * 1, 创建一个类,实现Converter接口
             * 2,重写convert方法,实现转换
             * 3,在拷贝属性之前,注册转换器
            */
            ConvertUtils.register(new DateConverter(), Date.class);
            BeanUtils.copyProperty(u, "birth", "1988-11-20");
            ConvertUtils.register(new PointConverter(), Point.class);
            BeanUtils.copyProperty(u, "point", "12,23");

            User u2=new User();
            BeanUtils.copyProperties(u2, u);

            System.out.println(u.getName()+u.getBirth()+u.getPoint());
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

}

apache-beanutil工具类的使用的更多相关文章

  1. Apache Commons 工具类介绍及简单使用

    转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...

  2. linkin大话数据结构--apache commons工具类

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...

  3. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  4. BeanUtil工具类的使用

    BeanUtils的使用 1.commons-beanutils的介绍 commons-beanutils是Apache组织下的一个基础的开源库,它提供了对Java反射和内省的API的包装,依赖内省, ...

  5. Apache Commons 工具类介绍及简单使用(转载)

    原文链接 http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动 ...

  6. Java:Apache Commons 工具类介绍及简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. Commons简介 组件 功能介绍 commo ...

  7. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)

    JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <%  Java代码  %>  相当于写在service方法中. <%=java 变量或者表达式 %> ...

  8. apache StringUtils 工具类

    // org.apache.commons.lang3.StringUtils // 1.IsEmpty/IsBlank - checks if a String contains text 检查是否 ...

  9. apache ArrayUtils 工具类

    org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...

  10. 03-封装BeanUtil工具类(javabean转map和map转javabean对象)

    package com.oa.test; import java.beans.BeanInfo; import java.beans.IntrospectionException; import ja ...

随机推荐

  1. js获取select下拉框选中的的值和判断checkbox是否选中状态

    html: <select id="lib_select"  name="">   <option   value="1" ...

  2. [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等

    1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...

  3. 【CentOS7】Could not retrieve mirrorlist http://mirrorlist.centos.org/?...

    在执行命令 sudo yum clean expire-cache 清理完过期的缓存后,再执行yum install 或 update命令都失败了.原因是清理过期缓存结果不该被清理的也删掉了,可能是y ...

  4. 【Tomcat】Invalid character found in the request target

    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC ...

  5. DOM树节点和事件

    一.前言:DOM树节点是JS的基础语句.通过节点,能够取到HTML代码中的任意标签,从而对其进行修改和添加各种视觉效果. 二.DOM树节点    DOM节点分为三大类: 元素节点,属性节点,文本节点  ...

  6. JS中的数据类型小结

    首先说说JS数据类型的分类.分为标准型和typeof类型(即控制台打印,浏览器区分) 标准型:基本类型中有:number.string.boolean.undefined.null  复合类型:obj ...

  7. eclipse如何把多个项目用不同的文件夹分隔开

    我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入 ...

  8. ios 初体验< UISegmentedControl 分段控件>

     小知识:  数组快速创建 @[@"",@"",@"",@"".......],字典快速创建方法:@{@"&q ...

  9. C#将Excel数据表导入SQL数据库的两种方法(转)

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

  10. Unity3D安装破解教程(以Unity5.3.4为例)(转)

      Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.目 ...