实现的原因
Spring中的BeanUtils.copyProperties(source,target),不能忽略大小写,类型不同不能相互赋值。速度并不是特别理想。自己根据反射实现了工具类。 其中ReflectASM需要引入下面jar包
<!---RelectAsm-->
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>reflectasm</artifactId>
<version>1.11.7</version>
</dependency>
#具体代码
import com.esotericsoftware.reflectasm.MethodAccess;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
/**
*
* @Auther: xjw
* @Description: 此类主要用于反射,对反射的一些操作进行缓存起来。
*/
public class BeanUtils {
/**
* 集合 copy
*
* @param sources
* @param target
* @param <T>
* @return
*/
public static <T> List<T> listCopyPropertiesASM(List sources, Class<T> target) {
List list = new ArrayList<>(sources.size());
sources.forEach(it -> {
list.add(copyPropertiesASM(it, target));
});
return list;
}
/**
* 通过 target的Class 复制
* target 必须有一个无参构造器
*
* @param source
* @param target
* @param <T>
* @return
*/
public static <T> T copyPropertiesASM(Object source, Class<T> target) {
T newT = null;
try {
newT = target.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return copyPropertiesASM(source, newT);
}
/**
* 通过 ASM反射 速度比 Spring BeanUtils.copyProperties(source,target) 快一倍
* 大小写可以忽略
* 下划线 _ 被忽略
*
* @param source 源对象
*