场景:
控制层使用vo对象,数据层使用po对象,业务层负责将po对象转换成vo对象传递给控制层
vo和po对象之间转换可以用BeanUtils.copyProperties(vo, po);方法
如果数据层传递的是要给集合对象,譬如List集合,我是这么写的
Java code
1 2 3 4 5 6 7 8 |
List<DeptVO> voList=new ArrayList<DeptVO>(); List<DetPO> poList=dao.list(); DepartmentVO vo=null; for(DeptPO po:poList){ vo=new DepartmentVO(); BeanUtils.copyProperties(vo, po); voList.add(vo); } |
结果符合需求,但是每个业务模块都使用这种写法,感觉效率太低了,
各位有没有好的解决方案或思路,能给介绍下,万分感谢
如果是spring的话可以采用AOP解决,可以将你的业务方法的返回值改为object,然后将需要转换的业务方法定义为切入点,使用spring的环绕增强 ,切入点你可以在spring的配置文件中定义
1 2 3 4 5 6 7 8 |
//通过MethodInterfceptor实现环绕增强,关键代码如下 public Object invoke(MethodInvocation invocation) throws Throwable{ try{ List<DeptVO> voList=new ArrayList<DeptVO>(); Object po=invocation.proceed(); //调用目标方法 BeanUtils.copyProperties(vo, po); } return voList;//将你转换的后的对象返回出去 } |
自己写了个公共方法,勉强能用,分享下
Java code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public static List copyList (List <? extends Object> poList , Class voClass){ List voList=new ArrayList(); Object voObj =null; for(Object poObj:poList){ try { voObj = voClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } BeanUtils.copyProperties(poObj, voObj); voList.add(voObj); } System.out.println("1111"+voList.size()); return voList; } 调用 List<DeptVO> voList=Util.copyList(poList, DeptVO.class); |