public class MyBeanUtils extends org.apache.commons.beanutils.BeanUtils { public static void copyBeanNotNull2Bean(Object databean,Object tobean)throws Exception { PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(databean); for (int i = 0; i < origDescriptors.length; i++) { String name = origDescriptors[i].getName(); // String type = origDescriptors[i].getPropertyType().toString(); if ("class".equals(name)) { continue; // No point in trying to set an object's class } if (PropertyUtils.isReadable(databean, name) && PropertyUtils.isWriteable(tobean, name)) { try { Object value = PropertyUtils.getSimpleProperty(databean, name); if(value!=null){ copyProperty(tobean, name, value); } } catch (java.lang.IllegalArgumentException ie) { logger.error(ie,ie); // Should not happen } catch (Exception e) { logger.error(e,e); // Should not happen } } } } }
使用这段代码进行javabean的复制,并且srcBean为null的字段,不进行复制。
这段代码测试环境是正常的,在生产环境下,运行一段时间后(大概有1个月的样子),就会出现很诡异的问题,javaBean里面Integer,Long等类型的 复制后字段变成null了(源javaBean和目标javaBean该字段都不不为空的情况下)。
正在持续监测中...
注:copyProperty 方法是继承于org.apache.commons.beanutils.BeanUtils
===================================================================
2014/04/27
问题终于解决了!
原因是项目引用的另一个第三方jar包里,对BeanUtils注册了全局的转换器
ConvertUtils.register(new xxx.DateConverter(), Date.class); ConvertUtils.register(new xxx.BigDecimalConverter(), BigDecimal.class); ConvertUtils.register(new xxx.IntegerConverter(), Integer.class);
而这三个转换器里面因为某种原因,存在这样的逻辑:
即srcBean和targetBean中类型相同的字段,返回null
这个第三方jar也使用了apache beanUtils,不过用途并不是复制bean,所以使用了这种逻辑的转换。
结果就是造成了我的项目中 一旦使用了这个第三方jar的功能之后,转换器被注册,之后便出现了文中开头的问题,也就是所谓的“运行一段时间后,便出现bean复制null的情况”。
相关推荐
Apache Commons BeanUtils是Java开发中的一个非常重要的工具库,它为开发者提供了便利的方式来操作JavaBeans。这个库的主要目标是简化JavaBean属性的访问,通过提供一套简单易用的API,使得开发者无需直接调用getter...
Commons BeanUtils库是Apache软件基金会开发的一个Java工具包,它为Java编程提供了一种便捷的方式来操作JavaBeans。这个库的核心是它的BeanUtils类,它提供了一系列的方法,使得开发者可以通过属性名称来读取和设置...
Apache Commons BeanUtils是Java开发中的一个实用库,它提供了对JavaBeans对象的便捷操作。这个库简化了属性的获取和设置,以及类型转换等任务,极大地提高了开发效率。标题"commons-beanutils-1.9.3"指的是该库的一...
总之,Apache Commons BeanUtils Core 1.8.0-BETA是一个强大的工具,它简化了Java Bean操作,提高了开发效率,同时也为开发者提供了灵活的解决方案。理解和掌握这个库的使用,能够帮助我们在Java开发中更好地管理和...
Apache Commons BeanUtils是Java开发中的一个实用工具库,它提供了对JavaBeans操作的强大支持。这个库简化了在Java应用程序中处理Java对象的属性的工作。在本篇中,我们将深入探讨`commons-beanutils-1.8.0.jar`和`...
首先,`commons-beanutils-1.8.0.jar`是Apache Commons项目的一个子项目,其核心目标是提供一套用于操作JavaBean属性的工具类。这个版本的BeanUtils库包含了对JavaBeans的全面支持,包括属性的获取、设置、复制以及...
Apache Commons BeanUtils是一个Java库,提供了方便的工具类来简化对象属性的操作。它允许开发者通过简单的字符串命名规则来访问和修改对象的属性,而无需直接调用getter和setter方法。在`commons-beanutils-1.8.3-...
在Java开发中,Apache Commons BeanUtils是一个非常实用的工具库,它极大地简化了JavaBean对象之间的属性操作,使得开发者能够更高效地处理对象属性的设置、获取和复制。而Apache Commons Logging则是一个轻量级的...
Apache Commons BeanUtils是Apache软件基金会提供的一个开源项目,它提供了一组方便的工具类,用于简化JavaBean操作。BeanUtils库的核心功能包括:属性的动态读写、对象间的属性复制、类型转换等。在给定的“commons...
标题中的"commons-beanutils-1.8.3+commons-logging-1.1.1+itcast-tools-1.4.2"提及了三个Java库:Apache Commons BeanUtils 1.8.3版本,Apache Commons Logging 1.1.1版本,以及一个名为itcast-tools的工具集1.4.2...
Apache Commons BeanUtils是一个实用工具库,专门用于处理JavaBeans。它简化了JavaBean属性的访问,提供了对Java反射API的简单封装,使得开发者可以方便地操作对象的属性,而无需直接调用getter和setter方法。例如,...
Apache Commons BeanUtils是Apache软件基金会的一个开源项目,它提供了一套便捷的JavaBean操作API,使得开发者可以方便地进行JavaBean属性的读写操作,无需手动编写getter和setter方法。BeanUtils的核心功能包括: ...
在Java开发领域,Apache BeanUtils库是一个非常实用的工具包,它为开发者提供了方便的Java Bean操作。这个库主要由两个部分组成:日志包和Bean包,它们各自扮演着不同的角色,帮助开发者更高效地处理Java对象。 ...
最后,`commons-logging-1.2.jar`是Apache Commons Logging库,它提供了一个API,允许程序代码以一种统一的方式记录日志,而无需关心实际使用的日志实现(如Log4j或Java内置的日志框架)。在BeanUtils中,这个库用于...
1. **属性复制(Property Copying)**:BeanUtils提供了一个`copyProperties()`方法,可以将一个JavaBean对象的属性值复制到另一个对象,极大地简化了对象间的属性同步。 2. **动态属性访问(Dynamic Property ...
BeanUtils是Apache Commons项目中的一个核心工具包,主要用于JavaBean对象的属性操作。这个开发包提供了许多方便的方法,使得在处理Java对象的属性时能够更加简单和便捷。它基于Java反射机制,允许开发者以一种相对...
它提供了一个统一的接口,简化了日志记录的代码,并且可以根据部署环境选择最适合的日志框架,提高了代码的可移植性和灵活性。 BeanUtils的主要知识点包括: 1. **属性复制**:`copyProperties()`方法可以将源对象...
这个"beanutils的jar包"是1.93版本,它包含了对bean操作的各种方法,同时也集成了log包,方便开发者进行日志记录,这对于在不同JDK版本环境中调试和解决问题特别有帮助。 首先,BeanUtils库的核心功能在于提供了一...
例如,BeanUtils.copyProperties()方法能够方便地将一个Bean的所有属性值复制到另一个Bean,这对于数据迁移或对象复制场景非常有用。同时,BeanUtils.getProperty()和BeanUtils.setProperty()允许开发者通过字符串...