Spring 中的BeanUtils与apache中的BeanUtils用法与比较-(拷贝对象)

文章目录

        • 前言
        • 由來
          • 阿里代码规约
      • spring包下
      • apache包下
          • apache下的BeanUtils最常用的方法为:
      • Apache Common BeanUtil的常见使用场景。

前言

BeanUtil是一个常用的在对象之间复制数据的工具类,著名的web开发框架struts就是依赖于它进行ActionForm的创建。
其中一个是apache包下的 一个是spring包下的

由來

有一次开发过程中,刚好看到小伙伴在调用 set 方法,将数据库中查询出来的 Po 对象的属性拷贝到 Vo 对象中,
这种操作非常容易出错,因为对象的属性太多,有可能会漏掉一两个,而且肉眼很难察觉。
类似这样的操作,我们很容易想到可以通过反射来解决。其实,如此普遍通用的功能,一个BeanUtils工具类就可以搞定了。
于是我建议这位小伙伴了解一下 BeanUtils,后来他使用了 Apache BeanUtils.copyProperties 进行属性拷贝,
这为程序挖了一个坑!
阿里代码规约
当我们开启阿里代码扫描插件时,如果你使用了 Apache BeanUtils.copyProperties 进行属性拷贝,
它会给你一个非常严重的警告。因为,Apache BeanUtils性能较差,可以使用 Spring BeanUtils 
或者 Cglib BeanCopier 来代替。

spring包下

  1.public void copyProperties(java.lang.Object dest, java.lang.Object orig)
	把dest中的值copy到orig中.

apache包下

包:

org.apache.commons.beanutils.BeanUtils
apache下的BeanUtils最常用的方法为:
  1.public void copyProperties(java.lang.Object dest, java.lang.Object orig)
	把orig中的值copy到dest中.
2.   public Map describe(java.lang.Object bean)
	把Bean的属性值放入到一个Map里面
   3.
   public void populate(java.lang.Object bean, java.util.Map properties)
	把properties里面的值放入bean中
4.   public void setProperty(java.lang.Object bean, java.lang.String name, java.lang.Object value)
	设置Bean对象的名称为name的property的值为value.
 public String getProperty(java.lang.Object bean, java.lang.String name)
  取得bean对象中名为name的属性的值。

详细的使用方法可以参见官方网站:

http://jakarta.apache.org/commons/beanutils/

Apache Common BeanUtil的常见使用场景。

  1. 同类之间不同对象要求进行数据复制。
    
User user1 =;
User user2 =;
BeanUtils. copyProperties(user2,user1);
  1. 不同类不同对象之间的数据复制。
    
UserForm userForm =;
User user =;
BeanUtils. copyProperties(user, userForm);
相信经常使用struts的人,一定会很熟悉上面的代码。
这是一个典型把页面的value object数据复制到domain object的例子。
  1. 对象数据和Map之间互相转化。
    
User user =;
Map userMap = BeanUtils.describe(user);
Map userMap =;
User user =;
BeanUtils.populate(user,userMap);
 Map可以看成一个动态数据容器,作为VO很适合在不同层之间传播数据,作为PO也可以动态存储字段信息,
合理运用可以减少程序很多修改和维护工作。所以让bean和map之间方便的进行数据填充,非常必要。

你可能感兴趣的:(java,拷贝对象,java复制对象,Spring中的BeanUti,apache中的BeanUt,java)