实现javabean的属性拷贝

在struts的实践过程中,经常两个javabean交换数据的情况,如ActionForm与数据库中的表相关的bean交换数据。通常情况下要写很多get和set语句,一个个属性依次拷贝。这样的话,如此重复繁重的工作让程序员感觉不到编程的快乐。于是在网上查相关资料知,在apache.org有一个project:common-beanutil,提供的一个BeanUtil类,这个类有一个静态方法BeanUtil.copyProperties()实现了该功能。后来我在与java相关的书上知道的java的反射机制(reflect),偿试着并实现了两个javabean的属性拷贝功能。

import java.lang.reflect.*;
/**
@author Xiaobo Zheng
@date 2005-12-28
*/
public class BeanUtil2{
/**
@parameter Object obj1,Object obj2
@return Object
用到反射机制
此方法将调用obj1的getter方法,将得到的值作为相应的参数传给obj2的setter方法
注意,obj1的getter方法和obj2方法必须是public类型
*/

public static Object CopyBeanToBean(Object obj1,Object obj2) throws Exception{
Method[] method1=obj1.getClass().getMethods();
Method[] method2=obj2.getClass().getMethods();
String methodName1;
String methodFix1;
String methodName2;
String methodFix2;
for(int i=0;i<method1.length;i++){
methodName1=method1[i].getName();
methodFix1=methodName1.substring(3,methodName1.length());
if(methodName1.startsWith("get")){
for(int j=0;j<method2.length;j++){
methodName2=method2[j].getName();
methodFix2=methodName2.substring(3,methodName2.length());
if(methodName2.startsWith("set")){
if(methodFix2.equals(methodFix1)){
Object[] objs1=new Object[0];
Object[] objs2=new Object[1];
objs2[0]=method1[i].invoke(obj1,objs1);//激活obj1的相应的get的方法,objs1数组存放调用该方法的参数,此例中没有参数,该数组的长度为0
method2[j].invoke(obj2,objs2);//激活obj2的相应的set的方法,objs2数组存放调用该方法的参数
continue;
}
}
}
}
}
return obj2;
}
}

时间: 2024-08-03 13:31:49

实现javabean的属性拷贝的相关文章

JavaBean的属性

JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量.在JavaBean设计中,按照属性的不同作用又细分为四类:Simple, Index, Bound与Constrained属性. 1.1 Simple属性 一个简单属性表示一个伴随有一对get/set方法(C语言的过程或函数在Java程序中称为"方法")的变量.属性名与和该属性相关的get/set方法名对应.例如:如果有setX和getX方法

实战1--应用EL表达式访问JavaBean的属性

(1)编写index.jsp页面,用来收集用户的注册信息 <%@ page language="java" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServe

JSTL学习笔记1-----操作javabean以及属性

    JSTL  又称JSP标准标签库 有apache的  jarkata小组开发 同EL表达式目的一样都是为了 将复杂的jsp代码 以标签的形式 显示出来 我们在使用JSTL就要下载jstl.jar 和 standard.jar文件  ,要想tomcat 和 我们的Eclipse 都支持   JSTL那么就要 分别将2个jar 部署到  tomcat的lib目录下  ,以及将这两个jar  添加到我们项目的  BuildPath中去.       添加到BuildPath是为了 我们在Ecl

关于javabean的属性操作

问题描述 我是一名java自学者,在网上看的视频,对javabean属性的操作基本都用PropertyDescriptor或BeanUntils等等.假设有Pointp=newPoint();(Point类符合javabean规范)为什么不简单的调用p.setX()或p.getX();对属性操作呢?而非得用PropertyDescriptor或BeanUntils等通过反射来调用Point类里面的setget方法?这不是特别麻烦吗?希望有经验者解答.谢谢. 解决方案 解决方案二:用Propert

我也造了个轮子:BeanMapping(属性拷贝)

背景 最近公司在大力推进服务化平台,我在中间主要做一个orm框架,解决model和数据源之间的映射问题.这里不选择已有的hibrenate,主要考虑自己公司的一些特殊场景:比如多数据源(数据库,搜索引擎,memcached,nosql等),同时可以 做一些特殊优化,比如多数据源加载时采用并行加载(我之间做的一个工具包 (业务层)异步并行加载技术分析和设计) 也不多罗嗦,我主要负责从多个数据源搜集回来的数据,构造成对应的model对象.可以看一下具体的分析过程. 分析 每个数据源采集回来的数据可能

在Struts中使用JavaBean和List(多行数据)类型属性

数据   在 Strust 中,我们可能经常要在 ActionForm 中使用其他 JavaBean 作为属性类型,这里就存在着如何使用好这些属性与 HTML Form 之间的数据交换,下面我们就这些问题做一讲解. 如在用户注册界面中,我们通常会将用户的联系方式形成一个单独的新的 Class ,如 Contact ,包含以下属性:电话 (tel) ,手机 (cell) , Email(email) , QQ(qq) ,通信地址 (adress) 等等,这样条理也比较清晰,以下是这个 Action

javaBean入门(5) javaBean属性范围的删除

在javaBean[04]中学习过了javaBean的四种属性范围之后,如果一个javaBean不再使用了,就可以删除了. javaBean删除语法概览 删除javaBean可以直接使用四种属性范围的removeAttribute()方法进行删除 1. 删除page范围的javaBean可以使用 pageContext.removeAttribute(javaBean名称); 2. 删除request范围的javaBean可以使用 request.removeAttribute(javaBean

JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。

JavaBean的内省操作 跟反射差不多 ,只是内省操作比反射简单,但是原理都一样, 学会了JavaBean的内省操作 那么对于JavaBean在web中的应用就会有很好的理解,并且明白为什么利用动作指令setProperty就可以设置JavaBean的属性 : 看下面代码 ,有注释. 假设我们有一个JavaBean package me.test; public class IntroSpectorTest    {  private int x ;  public IntroSpectorT

java对象拷贝——PropertyUtils.copyProperties()用法和性能

BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度. 使用PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean.   例一 Book srcBook = new Book(); srcBook.s