java复制bean
来源:互联网 发布:java多线程编程 方腾飞 编辑:程序博客网 时间:2024/05/14 07:19
基本思想就是利用java反射机制获得beans中的setter和getter方法,当发现两者属性名一致时就调用方法,获得和设置值,前提,两个bean对象必须属性名和类型一致,而且实现了getter和setter方法。
public class BeanCopyer {
private static BeanCopyer beanCopyer = new BeanCopyer();
private Object resource;
private Object destination;
private BeanCopyer() {
}
/**
*
* 方法说明:生成实例
*
* Author: czh Create Date: 2016-3-29 下午02:23:47 History: 2016-3-29
* 下午02:23:47 Administrator Created.
*
* @param from
* @param to
* @return
*
*/
public static BeanCopyer created(Object from, Object to) {
beanCopyer.resource = from; // 目标
beanCopyer.destination = to; // 目的
return beanCopyer;
}
/**
*
* 方法说明:
*
* Author: czh Create Date: 2016-3-29 下午04:40:32 History: 2016-3-29
* 下午04:40:32 Administrator Created.
*
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
*
*
*/
public void copy() throws IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
Method[] methods = resource.getClass().getMethods();
Method[] methodsTo = destination.getClass().getMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().startsWith("get")) { // 通过getXX和setXX来复制
String property = methods[i].getName().substring(3); // 目标bean的属性名,比如getName的Name
for (int j = 0; j < methodsTo.length; j++) {
// 找到目标class对应的setter方法
if (methodsTo[j].getName().startsWith("set")
&& methodsTo[j].getName().substring(3).equals(property)) {
Object[] objs2 = new Object[1];
objs2[0] = methods[i].invoke(resource, new Object[0]); // 从目标bean中执行方法,得到返回值
methodsTo[j].invoke(destination, objs2); // 设置返回值至目的bean中
break;
}
}
}
}
}
}
使用示例:
public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
User user1 = new User(); //目标
user1.setAge(25);
user1.setName("cz");
User user2 = new User(); //目的 同一个类
Student student = new Student(); //目的,不是同一个类
BeanCopyer copyer = BeanCopyer.created(user1, user2); //第一个复制
copyer.copy();
BeanCopyer copyerD = BeanCopyer.created(user1, student); //第二个复制
copyerD.copy();
System.out.println(user2.getAge() + ":" + user2.getName());
System.out.println(student.getAge() + ":" + student.getName() + ":" + student.getNumber());
System.out.println("abc123456".substring(3));
}
感觉上面的实现还有很多可以优化的地方,大家可以根据实际需要修改为静态方法之类的。
- java复制bean
- java bean复制
- java bean 属性复制 --BeanCopier
- java bean 属性复制 --BeanCopier
- 将数据从Java Bean复制到另一个Java Bean
- java两个相同Bean对象复制
- java bean对象之间复制属性
- 利用EZMorph复制bean
- bean克隆复制
- 利用EZMorph复制bean
- Bean对象复制属性
- java bean,spring bean
- BeanUtils bean的属性复制
- 两个bean之间的复制
- 使用BeanUtils复制Bean属性
- Java Bean
- Java Bean
- Java Bean
- lubuntu桌面配置需求及实现(1)
- spring data jpa 利用JpaSpecificationExecutor做复杂查询
- 【C/C++】关键字static
- 秒杀业务架构优化之路
- 跑马灯
- java复制bean
- Java 枚举enum 使用详解
- [Study Notes][001][gstreamer] memory
- TCP连接中TIME_WAIT连接过多
- 如何做网络流量监控
- Android MVP 模式 简单易懂的介绍方式
- Node.js中,q在链式调用和异步调用中起到的作用
- RevealiOS使用教程之简易配置:不修改您的Xcode工程并加载Reveal
- 对话框的动画以及去掉对话框的标题