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. 设计模式(7)--Bridge(桥接模式)--结构型

    1.模式定义: 桥接模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式的用意是“将抽象化(Abstraction)与实现化(Impleme ...

  2. cxf整合spring错误为:cvc-complex-type.2.4.c

    cxf整合spring,报错信息如下: Multiple annotations found at this line:- cvc-complex-type.2.4.c: The matching w ...

  3. 【Tomcat】shell获得war包

    功能: 将maven项目打包复制到tomcat/webapps set git=C:\Users\zhengwenqiang\git set tomcat=e:\tomcat7.0.64 c: cd ...

  4. 【Spring 核心】高级装配

    高级装配用来适应开发和生产 不同环境下的软切换 一.环境与profile 1.开发环境下的profile package com.bonc.config; import javax.sql.DataS ...

  5. 2015年ACM长春区域赛比赛感悟

    距离长春区域赛结束已经4天了,是时候整理一下这次比赛的点点滴滴了. 也是在比赛前一周才得到通知要我参加长春区域赛,当时也是既兴奋又感到有很大的压力,毕竟我的第一场比赛就是区域赛水平,还是很有挑战性的. ...

  6. [js高手之路]设计模式系列课程-委托模式实战微博发布功能

    在实际开发中,经常需要为Dom元素绑定事件,如果页面上有4个li元素,点击对应的li,弹出对应的li内容,怎么做呢?是不是很简单? 大多数人的做法都是:获取元素,绑定事件 <ul> < ...

  7. split添加limit参数

    String str = "I love you"; /**这里被分割为I 和love you**/ String[] spiltStr = str.spit(" &qu ...

  8. adb命令安装apk 来学习吧

    1.将需要安装的apk放在platform-tools下 2.将手机和电脑连接,在cmd中输入 adb devices查看 3.使用adb命令安装apk,在cmd中输入:adb install apk ...

  9. chrome开发工具指南(十)

    检查和删除 Cookie 从 Application 面板检查和删除 Cookie. TL;DR 查看与 Cookie 有关的详细信息,例如名称.值.网域和大小,等等. 删除单个 Cookie.选定网 ...

  10. CyclicBarrier和CountDownLatch介绍

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp70 CyclicBarrier介绍 (一) 一个同步辅助类,它允许一组线 ...