java BeanUtils 快速构从相似对象中构建新对象

后台开发经常要做分层,例如java代码通常将业务大致上分为controller,service,dao层。为了适应不用层的业务变化。不总是一个javaBean贯穿所有层次。从接受用户请求,到最终和数据库交互。所以就有了VO(view object),BO(business object),PO(persistent object)的概念。之所以用这么多对象而不是一个对象贯穿始终,有一篇博客讲的比较好:java VO/PO/BO

固然将vo,po,bo等区分开在某些场景下是有优势的。但是在不同场景下,不同对象的转化却不好处理。比如说vo,po,bo几乎很相近,或者很多字段都相同,为了将不同对象转化,我们不得不调用每个属性的get,set方法来设置参数。一个一个设置导致代码比较多,也比较费时间。所以必须借助工具来完成以上工作。

BeanUtils就能够完成以上工作。org.apache.commons.beanutils.BeanUtils可以完成将相近的类中相同属性的复制。除了apache包以外还有其它的BeanUtils,功能是一样的。调用方式也很简单:

BeanUtils.copyProperties(destBean, sourceBean);
例:

 如果bean1 有String v1,String v2,String v3 三个属性,bean2有Stringv1,Integer v2,String v4 三个属性。

如果通过一个bean2快速赋值给bean1,那么bean1的v1,和v2将被替代。即使bean1的v1原来有数据,bean2没数据,也会替代这一点需要注意。

 如果bean1的类型和bean2的类型不一致,BeanUtils会尝试转化数据类型,如果转化失败会报错。像integer转string,数字的string转integer都没有什么问题。

 同时。两个类的属性必须有set 和get 方法,否则没有办法转化。

 如果bean1和bean2 中包含同名和同类型的对象也是可以相互转化的。但是如果名字相同,嵌套的对象类型不同会报错。

bean中嵌套的list如果list的泛型相同也能相互转化,非常强大!

至于名字不相同的参数就需要手动get,set了。或者使用BeanUtils的另外一个方法:

BeanUtils.setProperty(bean, name, value);

以上




猜你喜欢

转载自blog.csdn.net/uncle_david/article/details/79283590