`

Spring的BeanUtils和PropertyUtils的用法简介

阅读更多
一、简介:

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.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异常。
分享到:
评论

相关推荐

    Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier

    这篇文章将对比分析Apache BeanUtils、PropertyUtils、Spring BeanUtils以及Cglib BeanCopier这四个常用的Bean复制工具的性能和特点。 首先,Apache BeanUtils是Apache Commons项目的一部分,提供了一系列便捷的...

    BeanUtils jar包+源码

    3. **类型转换**:BeanUtils内部使用了`PropertyUtils`类来处理属性的类型转换,当源对象和目标对象的属性类型不一致时,它会尝试进行自动类型转换。然而,这种转换并不总是成功,对于一些复杂类型的转换,可能需要...

    BeanUtils包含源码和jar包, 包含BeanUtils和logging一套拿走,有源码和jar包

    在实际开发中,我们不仅可以通过BeanUtils来简化JavaBean的操作,还可以结合Spring框架中的BeanUtils,实现更高级的特性,比如AOP(面向切面编程)中的自动装配和属性注入。 总的来说,这个压缩包提供的BeanUtils...

    commons-beanutils-1.8.0

    例如,在Web开发中,使用Struts或Spring MVC框架时,BeanUtils可以帮助快速实现模型和视图之间的数据交换。 值得注意的是,`commons-beanutils-1.8.0.jar`依赖于`commons-logging.jar`。这个库是Apache Commons ...

    BeanUtils.rar

    7. `PropertyUtils`:BeanUtils的一个扩展,提供了更多的属性操作方法,如遍历所有属性、动态调用属性方法等。 在实际开发中,BeanUtils通常配合其他组件一起使用,比如Spring框架中的DataBinder,或者MyBatis中的...

    spring-framework-3.0.2.RELEASE-dependencies.zip

    4. **BeanUtils和PropertyUtils**:这两个来自Apache Commons BeanUtils的类,为Spring提供了属性复制和bean操作的能力。它们简化了对象之间的属性拷贝,使得在对象装配和数据绑定时更加方便。 5. **Collections ...

    commons-beanutils-1.9.1.jar<---&gt;commons-logging-1.1.3.jar

    例如,当使用BeanUtils进行属性赋值时,如果出现异常(如找不到对应的setter方法),可以通过commons-logging记录这些错误信息,便于调试和问题排查。 `commons-beanutils-1.9.1.jar`与`commons-logging-1.1.3.jar`...

    commons.collections-3.2.1和commons-beanutils-1.9.2和commons.collections-3.2.1

    1. **PropertyUtils**:提供了静态方法来访问和修改Bean的属性,无需关心是否存在getter和setter。 2. **BeanUtils.copyProperties()**:可以实现两个对象间属性的深度复制,非常适用于对象的克隆和填充。 3. **...

    Beanutils相关资料

    - 在处理日期和时间属性时,BeanUtils提供了一种方便的方法来处理日期格式化问题,通过`PropertyUtils.setSimpleProperty()`和`PropertyUtils.getSimpleProperty()`方法。 6. **自定义转换** - 默认情况下,...

    dom4j+jstl+beanUtils+log4j

    下面将详细解释这些库的主要用途和使用方法。 1. DOM4J: DOM4J是一个Java库,用于处理XML文档。它提供了一种灵活且高性能的方式来解析、创建、修改和操作XML数据。DOM4J支持SAX和DOM解析,同时也提供了基于事件的...

    Java-项目经验.docx

    Class类、Method类和Field类是进行反射操作的主要工具,而Apache Commons的BeanUtils和PropertyUtils则简化了对象属性的设置和获取。 输入输出流是数据交换的基础,包括基本的字节流和字符流,以及包装流和对象序列...

    Java 项目经验.pdf

    了解Class、Method、Field类的使用,以及invoke()和newInstance()方法,掌握Apache Commons库中的BeanUtils和PropertyUtils。 5. **输入输出流**:理解IO流的概念,包括原始流和包装流,熟悉InputStream、...

    Java项目经验.docx

    Apache Commons库中的BeanUtils和PropertyUtils可以帮助简化对象属性的设置和获取。 输入输出流是处理数据传输的关键,包括基本的InputStream、OutputStream,以及Reader、Writer。适配器设计模式和装饰者模式用于...

    Java Bean 遍历和使用注解给Bean的属性添加属性值

    - **Apache Commons BeanUtils**:提供了一套方便的工具方法,用于Bean的属性遍历和值设置,如`PropertyUtils.getPropertyDescriptors(Class&lt;?&gt; beanClass)`可获取Bean的属性描述符。 - **Spring Framework**:...

    openbean的jar包

    本文将深入探讨OpenBean.jar的功能、使用方法以及它在Java Bean开发中的重要性。 一、OpenBean.jar概述 OpenBean.jar是由Apache软件基金会开源的一个项目,它主要包含了一系列与Java Bean相关的类和接口,这些类和...

    黑马程序员-----javaBean的操作类学习笔记

    - JavaBean可以通过`PropertyUtils`或`BeanUtils`类(来自Apache Commons BeanUtils库)进行便捷的属性读写,例如`BeanUtils.copyProperties(destBean, srcBean)`可以复制一个bean的所有属性到另一个bean。...

    java项目经理

    - `BeanUtils`、`PropertyUtils`: Apache Commons库提供的工具类。 - **输入输出流** - `InputStream`、`OutputStream`、`Reader`、`Writer`: 基础流类。 - Adapter设计模式与原始流类、Decorator设计模式与包装...

    java开发记录方法

    `PropertyUtils`是Apache Commons BeanUtils中的工具类,用于复制对象属性。 #### 4.2 字段比较 ```java EqualsBuilder.reflectionEquals(lhs, rhs, excludeFields); ``` `EqualsBuilder`是Apache Commons Lang中的...

Global site tag (gtag.js) - Google Analytics