没有废话
先是BeanUtils的实现类型:
import java.lang.reflect.InvocationTargetException; import java.util.Date; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import com.huateng.common.tools.ConvertTools; import com.huateng.common.tools.subTools.form.ProductFormVo; import com.huateng.common.tools.subTools.form.ProductFormVo1; /** * @author Jira * */ public class LocalBeanUtils extends BeanUtils { static { ConvertUtils.register(new DateConvert(), java.util.Date.class); ConvertUtils.register(new DateConvert(), java.sql.Date.class); ConvertUtils.register(new DateConvert(), java.lang.String.class); // ConvertUtils.register(new DateConvert(), java.lang.Long.class); //可以添加新的转换工具 } public static void copyProperties(Object dest, Object orig) { try { BeanUtils.copyProperties(dest, orig); } catch (IllegalAccessException ex) { ex.printStackTrace(); } catch (InvocationTargetException ex) { ex.printStackTrace(); } } public static void main(String...strings) throws Exception{ ProductFormVo pf; Long l=System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { ProductFormVo1 p = new ProductFormVo1(); p.setArticleId("a"); p.setCreateStamp(new Date()); p.setThruDate("2000-11-11 12:00:00"); pf = new ProductFormVo(); LocalBeanUtils.copyProperties(p, pf); } System.out.println(System.currentTimeMillis()-l); } }
它用到的DateConvert
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.beanutils.Converter; public class DateConvert implements Converter { public Object convert(Class arg0, Object arg1) { if (null == arg1) return null; /** 输入String ,输出Date */ if (arg1 instanceof String && arg0 != java.lang.String.class) { String p = (String) arg1; if (p == null || p.trim().length() == 0) { return null; } try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.parse(p.trim()); } catch (Exception e) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.parse(p.trim()); } catch (ParseException ex) { return arg1; } } }/** 输入String ,输出String */ else if (arg1 instanceof String && arg0 == java.lang.String.class) { return arg1; }/** 输入Date ,输出String */ else if (arg1 instanceof java.util.Date) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.format((java.util.Date) arg1); } catch (Exception e) { return null; } }/** 输入Date ,输出String */ else if (arg1 instanceof java.sql.Date) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.format((java.sql.Date) arg1); } catch (Exception e) { return null; } } return null; } }
下面是BeanCopier:
import java.util.Date; import java.util.HashMap; import java.util.Map; import net.sf.cglib.beans.BeanCopier; import com.huateng.common.tools.subTools.DateConverterBeanCopier; import com.huateng.common.tools.subTools.form.ProductFormVo; import com.huateng.common.tools.subTools.form.ProductFormVo1; /** * @author Jira *vo对象间的赋值操作 *DateConverterBeanCopier 可以添加新的对象转换功能 */ public class BeanCopierUtils { public static Map<String,BeanCopier> beanCopierMap = new HashMap<String,BeanCopier>(); public static void copyProperties(Object source, Object target){ String beanKey = generateKey(source.getClass(), target.getClass()); BeanCopier copier = null; if(!beanCopierMap.containsKey(beanKey)){ copier = BeanCopier.create(source.getClass(), target.getClass(), true); beanCopierMap.put(beanKey, copier); }else{ copier = beanCopierMap.get(beanKey); } copier.copy(source, target, new DateConverterBeanCopier()); } private static String generateKey(Class<?> class1,Class<?>class2){ return class1.toString() + class2.toString(); } public static void main(String...strings){ ProductFormVo pf; Long l=System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { ProductFormVo1 p = new ProductFormVo1(); p.setArticleId("a"); p.setCreateStamp(new Date()); p.setThruDate("2000-11-11 12:00:00"); pf = new ProductFormVo(); BeanCopierUtils.copyProperties(p, pf); } System.out.println(System.currentTimeMillis()-l); // System.out.println(pf.getArticleId()); // System.out.println(pf.getCreateStamp()); // System.out.println(ConvertTools.formatDataStyle3(pf.getThruDate())); } }
它用到的DateConverterBeanCopier:
import java.text.ParseException; import java.text.SimpleDateFormat; /** * @author Jira * */ public class DateConverterBeanCopier implements net.sf.cglib.core.Converter { public Object convert(Object arg1, Class arg0, Object context){ if (arg1 instanceof String && arg0 != java.lang.String.class) { String p = (String) arg1; if (p == null || p.trim().length() == 0) { return null; } try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.parse(p.trim()); } catch (Exception e) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.parse(p.trim()); } catch (ParseException ex) { return arg1; } } }/** 输入String ,输出String */ else if (arg1 instanceof String && arg0 == java.lang.String.class) { return arg1; }/** 输入Date ,输出String */ else if (arg1 instanceof java.util.Date) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.format((java.util.Date) arg1); } catch (Exception e) { return null; } }/** 输入Date ,输出String */ else if (arg1 instanceof java.sql.Date) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.format((java.sql.Date) arg1); } catch (Exception e) { return null; } } return null; } }
相关推荐
本文将深入探讨`BeanUtilsBean`对象复制的功能,特别关注它如何实现类型自动转换。`BeanUtilsBean`是BeanUtils的核心类,提供了对JavaBean属性的便捷访问和操作。 首先,让我们理解什么是对象复制。对象复制是指将...
PropertyUtils是Apache Commons BeanUtils的扩展,它增强了对复杂类型和集合的处理能力。与BeanUtils相比,PropertyUtils提供了更精确的异常处理。尽管在功能上有所增强,但在性能上与BeanUtils相差不大。 Spring...
使用BeanUtils,开发者可以避免手动编写大量的getter和setter方法来实现对象间的属性复制。例如,BeanUtils.copyProperties()方法允许我们快速地将一个对象的所有属性复制到另一个对象中。这在处理数据模型或业务...
- **Apache Commons BeanUtils库**:提供了`BeanUtils.copyProperties()`方法,可以快速实现对象间的属性复制,但不支持自定义复制规则。 - **Dozer库**:允许使用注解来定义复制规则,支持深度复制和类型转换,...
BeanUtils的核心功能在于属性的自动类型转换和封装,它能够自动处理JavaBeans对象之间的属性拷贝,即使源对象和目标对象的属性类型不完全匹配,BeanUtils也能尝试进行类型转换。例如,将字符串转换为整型或浮点型,...
BeanUtils是Apache Commons项目中的一个核心工具类库,...通过理解和熟练使用BeanUtils,开发者可以更加高效地进行对象之间的数据交换和处理。而提供的源码则可以帮助我们深入理解其内部机制,更好地定制和扩展功能。
这篇博文“MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象”探讨的是如何在Java编程中实现对象属性的深度复制。MyBatis是一个流行的Java持久层框架,它简化了数据库操作,而对象复制则是处理业务...
- **属性复制**:BeanUtils最核心的功能就是实现对象间的属性复制。通过`copyProperties()`方法,可以将一个对象的所有属性值复制到另一个对象,这在数据模型转换或者数据持久化过程中非常有用。 - **属性设置和...
例如,通过`BeanUtils.copyProperties()`方法,可以方便地将一个对象的属性值复制到另一个对象,极大地提高了代码的可读性和维护性。 2. **类型转换**:BeanUtils库能够自动处理基本数据类型的转换,如将字符串转换...
反射机制使得BeanUtils可以处理任何实现了getter和setter方法的对象。 - 在`PropertyUtils`类中,可以看到对`java.lang.reflect.Method`和`java.lang.reflect.Field`的大量使用,它们用于查找和调用对象的属性方法...
BeanUtils工具.jar包是Apache Commons项目中的一个核心组件,它为Java开发人员提供了一套方便的工具类,用于处理Java Bean对象之间的属性复制、类型转换等常见操作。这个库简化了对象模型之间的数据绑定,特别是在...
- **复制属性**:`copyProperties()`方法可以将一个JavaBean对象的属性值复制到另一个对象,这在处理模型对象时非常有用。 - **默认值**:当尝试获取不存在的属性或者转换失败时,可以设置默认值来避免异常。 - *...
《Apache Commons ...在理解和掌握BeanUtils的基础上,开发者可以更高效地处理JavaBeans对象,提高开发效率,同时降低出错的可能性。在使用时,应结合具体项目需求,合理运用BeanUtils的功能,以实现最佳效果。
这个包的出现极大地简化了对象属性的复制、设置和获取,使得开发者能够更高效地进行Servlet开发。现在,让我们深入探讨BeanUtils包的核心功能、工作原理以及如何结合源码来学习和应用。 首先,BeanUtils的核心功能...
- 如果属性名不完全匹配或者类型转换失败,BeanUtils会抛出异常,因此需要确保对象属性名的正确性和类型的一致性。 - 为了提高性能,可以使用BeanUtils.copyProperties()的重载方法,指定只复制部分属性。 五、...
4. **异常处理机制**:查看BeanUtils如何捕获和处理异常,以及在什么情况下抛出异常。 5. **测试用例**:分析`src/test/java`下的测试类,了解BeanUtils库的各种使用场景和边界条件。 6. **性能优化**:BeanUtils...
总的来说,Apache Commons BeanUtils 1.8.3版是Java开发中处理JavaBean对象的一种高效工具,提供了方便的属性操作和类型转换功能,源代码的开放使得开发者可以更深入地理解和利用这个库。在使用时,可以结合API文档...
7. **国际化支持**:BeanUtils可以与Apache Commons Locale和MessageSource配合,实现基于不同地区的属性值转换和显示。 在实际开发中,Apache Commons BeanUtils常用于Web框架如Struts和Spring,以及任何需要进行...
JavaBean和BeanUtils工具类是Java开发中常用的技术,它们主要应用于对象属性的访问和操作。JavaBean是一种规范,用于创建...通过熟练运用,开发者可以更高效地实现对象的创建、属性设置和数据传递,从而提升开发效率。