一、简介:
BeanUtils提供对 Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
二、用法:
BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:
public static void copyProperties(java.lang.Object dest,java.lang.Object orig) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如 Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值:
//得到TeacherFormTeacherForm teacherForm=(TeacherForm)form;//构造Teacher对象Teacher teacher=new Teacher();//赋值teacher.setName(teacherForm.getName());teacher.setAge(teacherForm.getAge());teacher.setGender(teacherForm.getGender());teacher.setMajor(teacherForm.getMajor());teacher.setDepartment(teacherForm.getDepartment());//持久化Teacher对象到数据库HibernateDAO=;HibernateDAO.save(teacher);而使用BeanUtils后,代码就大大改观了,如下所示://得到TeacherFormTeacherForm teacherForm=(TeacherForm)form;//构造Teacher对象Teacher teacher=new Teacher();//赋值BeanUtils.copyProperties(teacher,teacherForm);//持久化Teacher对象到数据库HibernateDAO=;HibernateDAO.save(teacher);
如果Teacher和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理。例如 Teacher包含modifyDate(该属性记录最后修改日期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的 copyProperties()后还要加上一句:
teacher.setModifyDate(new Date());
怎么样,很方便吧!除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:
* java.lang.BigDecimal * java.lang.BigInteger * boolean and java.lang.Boolean * byte and java.lang.Byte * char and java.lang.Character * java.lang.Class * double and java.lang.Double * float and java.lang.Float * int and java.lang.Integer * long and java.lang.Long * short and java.lang.Short * java.lang.String * java.sql.Date * java.sql.Time * java.sql.Timestamp
这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。
三、优缺点:
Apache Jakarta Commons项目非常有用。我曾在许多不同的项目上或直接或间接地使用各种流行的commons组件。其中的一个强大的组件就是BeanUtils。我将说明如何使用BeanUtils将local实体bean转换为对应的value 对象:
BeanUtils.copyProperties(aValue, aLocal)
上面的代码从aLocal对象复制属性到aValue对象。它相当简单!它不管local(或对应的value)对象有多少个属性,只管进行复制。我们假设local对象有100个属性。上面的代码使我们可以无需键入至少100行的冗长、容易出错和反复的get和set方法调用。这太棒了!太强大了!太有用了!
现在,还有一个坏消息:使用BeanUtils的成本惊人地昂贵!我做了一个简单的测试,BeanUtils所花费的时间要超过取数据、将其复制到对应的 value对象(通过手动调用get和set方法),以及通过串行化将其返回到远程的客户机的时间总和。所以要小心使用这种威力!
分享到:
相关推荐
本文将重点介绍 `org.apache.commons.beanutils` 匵下的功能及其实现原理。 #### 二、测试用的Bean 为了更好地理解 `BeanUtils` 的工作原理,我们首先定义一个简单的 Java Bean,例如下面的 `Month` 类: ```java...
下面是一段使用BeanUtils Core 1.7.0的简单示例: ```java import org.apache.commons.beanutils.BeanUtils; public class BeanUtilsExample { public static void main(String[] args) { MyBean source = new ...
Java工具类BeanUtils库介绍及实例详解 BeanUtils库是Apache软件基金会提供的一个Java工具类库,主要解决的问题是将对象的属性数据封装到对象中。在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据...
这个"commons-beanutils-1.8.2-bin"全功能包包含了一系列的jar文件,这些文件是BeanUtils库的核心组成部分,允许开发者更简单地处理JavaBeans属性。以下是关于这个包及其包含的内容的详细说明: 1. **BeanUtils库...
为了让首次接触Fileupload的开发人员能够更直观的理解该项目,我们将实现一个简单的文件上传功能,并一步步介绍开发步骤,以及详细的代码。 环境准备 1. 下载并安装Tomcat(已经有很多关于Tomcat安装以及...
本篇文章将详细介绍BeanUtils的使用以及如何将其整合到Servlet应用中。 Apache Commons BeanUtils是Apache软件基金会的一个开源项目,提供了对JavaBean操作的便捷方法,如属性的自动类型转换、属性的复制、以及对...
1. **BeanUtils介绍** Apache Commons BeanUtils库是基于JavaBean规范的,它提供了一系列API,用于简化对Java对象属性的操作。这些API包括了对属性的读取、设置、复制,以及转换等操作。这个库使得开发者可以避免...
今天,我们将详细介绍 Java Beanutils.copyProperties() 的用法和原理。 在 Java 开发中,我们经常需要将一个 JavaBean 的属性复制到另一个 JavaBean 中,这种情况在 Struts 中的 PO 对象和 ActionForm 中非常常见...
下面我们将介绍 Commons BeanUtils 组件的相关内容,以及部分实例和基本用法。 什么是 BeanUtils 在程序中对 JavaBean 的操作很频繁,所以 Apache 提供了一套开源的 API,方便对 JavaBean 的操作,即 BeanUtils ...
Apache Commons 工具类介绍及简单使用 Apache Commons 是一个开源的 Java 库,提供了许多实用的工具类,帮助开发者快速构建 Java 应用程序。本文将对 Apache Commons 工具类进行介绍,并提供简单的使用示例。 ...
4. **commons-beanutils.jar**: 提供了访问JavaBeans组件属性的工具类,简化了JavaBean属性的读写操作。 5. **commons-collection.jar**: Jakarta Commons Collections库提供了许多实用的集合类和算法,增强了Java...
以下是对Apache Commons中涉及的一些关键组件及其功能的详细介绍: 1. **BeanUtils**: Apache Commons BeanUtils 提供了对JavaBean进行操作的便捷方法,包括对象的克隆、属性复制等。如示例代码所示,`BeanUtils....
根据提供的文件信息,可以看出本文主要围绕Struts框架的英文介绍展开,特别强调了如何搭建一个简单的Struts应用程序。下面将详细解析Struts框架的核心概念、安装步骤以及如何创建一个简单的Struts应用。 ### Struts...
本篇将介绍一种简单的JSON解析方法,主要涉及`JsonUtil`、`BeanUtil`和`AjaxResponse`三个类。 首先,我们来看`JsonUtil`类,这是一个基础的JSON操作工具类,通常包括将Java对象转换为JSON字符串以及将JSON字符串反...
以下是对四个标签所代表的 Commons 工具集的详细介绍: 1. Commons BeanUtils Apache Commons BeanUtils 是一个用于简化 JavaBeans 操作的工具库。它提供了对 JavaBeans 的便捷访问和操作,尤其是在处理属性复制和...
Commons Digester 提供了一个简单易用的框架来解析XML文档并映射到Java对象。对于需要处理XML数据的应用程序而言,它极大地简化了开发过程。 #### Commons Lang (commons-lang.jar) Commons Lang 是一个实用工具库...
下面将对 Apache Commons 工具集中的几个常用的项目进行简单介绍。 一、 Commons BeanUtils Commons BeanUtils 是一个针对 Bean 的工具集。由于 Bean 往往是有一堆 get 和 set 方法组成,所以 BeanUtils 也是在此...
以下将详细介绍这一过程及其相关的知识点。 首先,我们需要理解表单数据和对象之间的关系。当用户在前端填写表单并提交后,这些数据会以键值对的形式通过HTTP请求发送到服务器。例如,一个简单的用户注册表单可能...
这篇博客主要探讨了几种用于这些格式互转的工具,下面将详细介绍这些工具及其使用方法。 1. **Gson** (Google的JSON库) Gson是由Google提供的一个开源库,它可以将Java对象转换为JSON字符串,反之亦然。使用Gson,...
总结来说,JSON是互联网应用间数据交换的标准格式,其简单易读的结构使得数据处理变得方便。在Java中,通过引入相应的JSON库,如JSON Lib,可以轻松地进行JSON数据的创建、解析和转换。确保正确引入所有依赖库是避免...