Commons-BeanUtils动态bean在项目中的应用

来源:互联网 发布:百度云盘网络证书无效 编辑:程序博客网 时间:2024/06/05 09:31
   公司在做一个中型的网站,常常会用到动态bean动态添加属性,或者拷贝页面中只需要用到的某些属性。因此,将自己在做项目过程中的一些心得体会展现出来,如果有说错的地方,还望大家批评指正。 

   在讲动态bean之前,不得不提一下DTO:Data Transfer Object(数据传输对象)

   DTO主要用于远程调用等需要大量传输对象的地方。假如某一张表里面有几十个甚至一百个字段,但是我们的 界面上只要显示十个字段。这时,客户端用Web Service来获取数据时,没有必要把整个PO对象传给客户端,我们需要的是只将这十个属性的DTO来传递结果给客户端,这样,到达客户端以后,如果用这个对象来对应界面的显示,那此时就转换为VO了。

  回到正题,接下来就是动态bean的应用了。假设现在有一张相册表ALBUM,里面有二十几个字段,对应的DTO为AlbumInfoDTO。则DTO里面就对应包含这二十几个属性。而我们界面上只需要其中的8个属性。此时,就会用到动态bean了。我们都知道,一个项目里面,像这种类似的情况还有很多。所以,我们有必要写一个公用类。

示例代码如下:

public static DynaBean createDynaBean(DynaProperty[] properties,String className) throws Exception {// 使用动态Bean的属性定义类DynaClass beanClass = new BasicDynaClass(className, null, properties);// 根据类,创建一个新的实例DynaBean bean = beanClass.newInstance();return bean;}

  而一般类似这种项目中,service层一般都会有一个对应的转换类,比如PO与DTO的相互转换,PO集合转换为DTO集合等。所以,我们不妨将创建动态bean的方法写在该转换类中。

以相册为例:(只将界面上需要用到的8个属性拷贝出来)

public static DynaBean getShowAlbumsInfoDynaBean(AlbumInfoDTO infoDTO)throws Exception {// 创建动态Bean属性DynaProperty[] properties = new DynaProperty[] {new DynaProperty("albumId", String.class),new DynaProperty("name", String.class),new DynaProperty("description", String.class),new DynaProperty("topPhotoId", String.class),new DynaProperty("url", String.class),new DynaProperty("enableFor", String.class),new DynaProperty("createTime", Date.class),new DynaProperty("modifyTime", Date.class) };DynaBean dynaBean = DynaBeanHelper.createDynaBean(properties, "album");// 使用PropertyUtils工具类拷贝Bean属性PropertyUtils.copyProperties(dynaBean, infoDTO);return dynaBean;}

写好之后,只需在对应service的实现类或action层里面调用其方法就可以了。

原创粉丝点击