package com.icil.booking.service.util;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.icil.fw.logging.ICILLogger;
import com.icil.fw.logging.ICILLoggerFactory; import net.sf.cglib.beans.BeanCopier;
import net.sf.cglib.core.Converter; public class CglibBeanCopierUtils { private static final ICILLogger logger = ICILLoggerFactory
.getInstance(CglibBeanCopierUtils.class); public static Map<String, BeanCopier> beanCopierMap = new HashMap<String, BeanCopier>(); /**
* @Title: copyProperties
* @Description: TODO(bean属性转换)
* @param source
* 资源类
* @param target
* 目标类
* @author yushaojian
* @date 2015年11月25日下午4:56:44
*/
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 Converter() {
private final Map<String, BeanCopier> bcMap = new HashMap<String, BeanCopier>(); @Override
public Object convert(Object sourcePropVal, Class targetPropClazz,
Object targetSetMethodName) {
/*logger.debug("======>>>>> sourcePropVal " + sourcePropVal
+ "======>>>>>targetPropClazz " + targetPropClazz
+ "======>>>>>targetSetMethodName "
+ targetSetMethodName);*/
/*if (BigDecimal.class.equals(targetPropClazz)) {
BigDecimal bd = null;
if (sourcePropVal != null && !"".equals(sourcePropVal)) {
bd = new BigDecimal(sourcePropVal.toString());
bd=bd.setScale(4, BigDecimal.ROUND_HALF_UP);
}
return bd;
} else if (Integer.class.equals(targetPropClazz)) {
Integer value = null;
if (sourcePropVal != null && !"".equals(sourcePropVal)) {
value = Integer.parseInt(sourcePropVal.toString());
}
return value;
} else if (Date.class.equals(targetPropClazz)) {
Date date = null;
if(sourcePropVal!=null && !"".equals(sourcePropVal)){
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
try {
date = sdf.parse((String)sourcePropVal);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return date;
}else if (int.class.equals(targetPropClazz)){
int value =0 ;
if (sourcePropVal != null && !"".equals(sourcePropVal)) {
value = Integer.parseInt(sourcePropVal.toString());
}
return value;
}*/
return sourcePropVal;
}
});
} protected static Object convertListGenericType(Object sourcePropVal) {
// TODO Auto-generated method stub
return null;
} private static String generateKey(Class<?> class1, Class<?> class2) {
return class1.toString() + class2.toString();
}
}

自定义BeanUtils的更多相关文章

  1. BeanUtils制作自定义的转换器

    一般来说,BeanUtils自带的Converter基本上可以满足我们在开发过程中的使用了,然而很多时候我们还是需要自定义一些转换器. MyBean.java package beanutils; i ...

  2. SpringBoot08 请求方式、参数获取注解、参数验证、前后台属性名不一致问题、自定义参数验证注解、BeanUtils的使用

    1 请求方式 在定义一个Rest接口时通常会利用GET.POST.PUT.DELETE来实现数据的增删改查:这几种方式有的需要传递参数,后台开发人员必须对接收到的参数进行参数验证来确保程序的健壮性 1 ...

  3. java jdbc的优化之BeanUtils组件

    1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils ...

  4. BeanUtils

    BeanUtils包的使用   BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: ...

  5. BeanUtils: 威力和代价(转载)

    转自:http://blog.sina.com.cn/s/blog_ab3fbf1b0101jbxz.html Apache Jakarta Commons项目非常有用.我曾在许多不同的项目上或直接或 ...

  6. atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug

    atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&qu ...

  7. 15、Jdbc的优化(BeanUtils组件)

    Jdbc的优化! BeanUtils组件 自定义一个持久层的框架 DbUtils组件 案例优化 1. BeanUtils组件 1.1    简介 程序中对javabean的操作很频繁, 所以apach ...

  8. BeanUtils框架的简单运用

    Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单.易用的API操作Bean的属性——BeanUtils Beanutils工具包的常用类: •BeanUt ...

  9. BeanUtils组件

    引入jar包(需要引入依赖的日志jar包) Person p = new Person(); p.setName("Daisy"); p.setAge(12); //对象的copy ...

随机推荐

  1. gitlab操作

    一.初始设置 在某一个具体的project下: 1.gitlab中删除一个工程Setting-->General-->Advanced settings-->RemoveProjec ...

  2. ballerina 学习二十八 快速grpc 服务开发

    ballerina 的grpc 开发模型,对于开发者来说简单了好多,不是schema first 的方式,而是我们 只要编写简单的ballerina service 就可以了,proto 文件是自动帮 ...

  3. How Distributed Outer Joins on PostgreSQL with Citus Work

    转自: https://docs.citusdata.com/en/v7.5/articles/outer_joins.html SQL is a very powerful language for ...

  4. prisma 集成 pipelinedb测试

    pipelinedb 是一个基于pg数据库开发的stream sql 数据库,和prisma 集成起来可以开发很 方便的stream 应用 使用docker 安装 项目初始化 prisma init ...

  5. streamsets 集成 minio s3测试

    具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考: https://www.cnblog ...

  6. maven工程下的“run as application”

    为了让maven能够在Terminal窗口执行(比在Console执行方便多了,命令行总是比右键选择run要快),需要配置如下的profile:然后敲入  mvn -test -Prun  即可.   ...

  7. C# 文本框只能输入数字和退格键 (转)

    C# 文本框只能输入数字和退格键 private void TextBox_KeyPress(object sender, KeyPressEventArgs e)    {     if(e.Key ...

  8. Navicat导出opencart2.3数据字典

    步骤请参考:http://blog.csdn.net/maquealone/article/details/60764420 运行SQL:   备注:opcml是数据库名称. select TABLE ...

  9. win10激活命令

    以管理员方式打开命令提示符输入以下3条命令slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 按回车slmgr /skms 54.223.212.31 按回车slmgr ...

  10. php对象的实现

    1.对象的数据结构非常简单 typedef struct _zend_object zend_object; struct _zend_object { zend_refcounted_h gc; / ...