`
zhjb2000
  • 浏览: 58360 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

基于反射技术实现 Bean 属性拷贝 copyProperties

阅读更多

importjava.lang.reflect.AccessibleObject;
importjava.lang.reflect.Field;
importorg.apache.log4j.Logger;

/***//**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2006</p>
*
*<p>Company:</p>
*
*<p>Author:一个人的日子</p>
*
*<p>Version:1.0</p>
*
*<p>CreateDate:2006-08-17</p>
*
*/



publicclassBeanUtil...{

privatestaticfinalLoggerlogger=Logger.getLogger(Logger.class);

/***//***//***//**
*Bean属性拷贝
*
*
@paramdest
*
@paramorig
*/

publicstaticvoidcopyProperties(Objectdest,Objectorig)...{
if(orig==null)...{
logger.error(
"error:copypropertyerror:origisnull");
}


if(dest==null)......{
logger.error(
"error:copypropertyerror:destisnull");
}

try......{
copy(dest,orig);
}
catch(Exceptione)......{
logger.error(
"error:copypropertyerror:"+e.toString());
}

}


/***//***//***//**
*当orig的属性为null的就不拷贝到dest
*
*
@paramdest
*
@paramorig
*
@throwsException
*/

privatestaticvoidcopy(Objectdest,Objectorig)throwsException...{

//得到两个Class的所有成员变量
Field[]destFields=dest.getClass().getDeclaredFields();
Field[]origFields
=orig.getClass().getDeclaredFields();

//设置访问权限
AccessibleObject.setAccessible(destFields,true);
AccessibleObject.setAccessible(origFields,
true);

Objectvalue
=null;
Stringname
=null;
StringreturnType
=null;

for(inti=0;i<origFields.length;i++)...{
name
=origFields[i].getName();
returnType
=origFields[i].getType().getName();
for(intj=0;j<destFields.length;j++)...{
if(name.equals(destFields[j].getName())&&returnType.equals(destFields[j].getType().getName()))...{
value
=origFields[i].get(orig);
if(value!=null)......{
destFields[j].set(dest,value);
}

break;
}

}

}

}

}

分享到:
评论

相关推荐

    common(bean_之音属性复制).zip

    标题中的"common(bean_之音属性复制).zip"提到了一个关于Java Bean属性复制的主题,这通常指的是对象间的属性拷贝或者映射过程。在Java开发中,特别是Spring框架中,Bean的属性复制是一个常见操作,它有助于减少...

    BeanMapper:比BeanUtils.copyProperties更快

    由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在运行时直接生成字节码来转换类,在首次生成后,后续...

    利用annotation完成对象间的属性拷贝

    我们将从标题“利用annotation完成对象间的属性拷贝”出发,结合描述中提到的博客链接,探讨这一技术。 首先,注解是一种元数据,它提供了在代码中添加额外信息的方式,这些信息可以被编译器或运行时环境用来进行...

    commons-beanutil-1.7.0-src

    8. **拷贝属性**:`copyProperties()`方法允许将一个JavaBean的属性值复制到另一个JavaBean,这对于对象的克隆和属性值的传递非常有用。 9. **模块化设计**:Apache Commons BeanUtils是Apache Commons项目的一部分...

    commons-beanutils-1.8.0-src

    首先,BeanUtils的核心功能是通过反射机制实现Bean的属性操作。在Java中,Bean通常是指符合JavaBeans规范的对象,具备getter和setter方法,用于封装数据。BeanUtils提供的API使得我们无需直接调用这些方法,而是通过...

    Commons BeanUtils 1.8.3 API

    1. **属性拷贝**:通过`copyProperties()`方法,可以将一个Java Bean的所有属性值复制到另一个Bean中,无需手动编写setter和getter方法。这对于数据模型的转换非常有用。 2. **反射操作**:BeanUtils库利用Java的...

    openbean的jar包

    3. **Bean introspection**:提供Introspector类,可以获取Bean的信息,如属性、方法、事件等,便于反射操作。 4. **Bean的复制**:BeanUtils类提供了copyProperties方法,可以方便地将一个Bean的属性复制到另一个...

    commons-beanutils (1.7.0 -1.9.2)6个

    - **属性拷贝**:`copyProperties()`方法使得能够将一个Bean的所有属性值复制到另一个Bean,大大简化了对象之间的数据迁移。 - **类型转换**:库内置了自动类型转换机制,当尝试将一个对象赋值给不匹配类型的Bean...

    commons-beanutils-1.9.2-src

    1. **属性访问**:`BeanUtils.copyProperties()`方法是最常用的,它能将一个Bean的所有属性值复制到另一个Bean中,这在对象拷贝或者数据绑定中非常实用。源码中,这个方法会递归地遍历对象的属性并进行赋值。 2. **...

    commons-beanutils.jar.zip

    1. **属性拷贝**:BeanUtils.copyProperties()方法可以实现两个JavaBean对象之间的属性值拷贝,极大地减少了代码量。 2. **动态属性访问**:通过BeanUtils.getProperty()和BeanUtils.setProperty(),我们可以动态地...

    封装对象工具类jar包.zip

    Apache BeanUtils是一个强大的Java Bean操作工具包,它简化了对Java对象属性的访问,使得开发者无需直接使用Java反射API即可方便地操作对象属性。在Java开发中,BeanUtils组件是Apache Commons项目的一部分,旨在...

    BeanUtils依赖Jar包与源码.rar

    1. **对象的克隆**:通过BeanUtils.copyProperties(),可以快速创建一个新的对象并复制原对象的所有属性,适用于深拷贝。 2. **数据绑定**:在Web应用中,BeanUtils可以将HTTP请求参数映射到Java Bean,实现前端...

    commons相关jar

    - **核心功能**:属性拷贝、属性访问(通过反射机制)、转换器(Converter)支持,用于在不同数据类型之间转换属性值。 - **使用示例**:`BeanUtils.copyProperties(sourceBean, targetBean)`可以将源对象的所有...

    BeanUtils工具类

    BeanUtils的核心功能是属性的复制,它通过反射机制来实现对象之间属性值的拷贝。例如,当我们从数据库查询结果中得到一个结果集,通常会将这些结果映射到Java Bean对象上,BeanUtils可以帮助我们自动填充Bean对象的...

    BeanUtil框架完整包

    4. **反射操作**:BeanUtils库利用Java反射API,使得开发者无需直接编写反射代码,就能执行基于属性名的方法调用。 5. **处理集合和数组**:对于Bean中包含集合或数组的属性,BeanUtils也提供了相应的处理方法,...

    BeanUtils资源

    3. **对象拷贝**:在对象模型转换时,BeanUtils的`copyProperties()`方法可以实现深度复制,避免了手动编写大量的赋值代码。 4. **属性操作**:对于拥有大量属性的复杂Bean对象,BeanUtils可以提供一种统一且简便的...

    apache BeanUtils

    BeanUtils底层基于Java反射API,因此它能够处理任何公开的bean属性,无论是public还是protected,甚至包括private属性,只要提供了对应的getter和setter方法。 10. 错误处理: 尽管BeanUtils库在处理异常方面做得很...

    对象拷贝-优雅的解决方案Mapstruct.docx

    传统的对象属性拷贝方式如 `BeanUtils.copyProperties` 虽然简单易用,但存在一些问题: 1. **性能问题**:基于反射的拷贝方式相对较慢。 2. **灵活性不足**:对于同名字段无法进行特殊处理,这可能导致某些不希望...

    beanUtils jar 包,还包括source和doc

    - 如果属性值是集合或自定义对象,需要递归调用`copyProperties()`进行深拷贝。 - 自定义类型转换器可以注册到`ConvertUtils`,以便处理特定类型的转换。 5. **文档与学习资源** 提供的"doc"文档通常包含API...

    Java工具类之Apache的Commons Lang和BeanUtils

    1. **属性拷贝**:`BeanUtils.copyProperties()`方法可以方便地将一个对象的属性值复制到另一个对象,大大简化了对象间的属性映射。 2. **属性访问**:`PropertyUtils`类提供了对Java对象属性的无反射访问,可以...

Global site tag (gtag.js) - Google Analytics