您的位置:首页 > 其它

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

2011-09-13 22:30 387 查看
公司在做一个中型的网站,常常会用到动态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层里面调用其方法就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: