Browse Source

Merge branch 'sprint/s4' into release/s4

release/s4
董书康 8 months ago
parent
commit
2b1d75bed8
2 changed files with 2 additions and 67 deletions
  1. +0
    -66
      demo-athenaopt_backend/develop/src/main/java/com/digiwin/athena/app/infra/common/utils/BeanCopyUtil.java
  2. +2
    -1
      demo-athenaopt_backend/pom.xml

+ 0
- 66
demo-athenaopt_backend/develop/src/main/java/com/digiwin/athena/app/infra/common/utils/BeanCopyUtil.java View File

@ -1,66 +0,0 @@
package com.digiwin.athena.app.infra.common.utils;
import com.digiwin.app.container.exceptions.DWRuntimeException;
import net.sf.cglib.beans.BeanCopier;
import net.sf.cglib.beans.BeanMap;
import org.springframework.objenesis.ObjenesisStd;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public final class BeanCopyUtil {
private BeanCopyUtil() {
}
private static ThreadLocal<ObjenesisStd> objenesisStdThreadLocal = ThreadLocal.withInitial(ObjenesisStd::new);
private static ConcurrentHashMap<Class<?>, ConcurrentHashMap<Class<?>, BeanCopier>> cache = new ConcurrentHashMap<>();
public static <T> T copy(Object source, Class<T> target) {
return copy(source, objenesisStdThreadLocal.get().newInstance(target));
}
public static <T> T copy(Object source, T target) {
BeanCopier beanCopier = getCacheBeanCopier(source.getClass(), target.getClass());
beanCopier.copy(source, target, null);
return target;
}
public static <T> List<T> copyList(List<?> sources, Class<T> target) {
if (sources.isEmpty()) {
return Collections.emptyList();
}
ArrayList<T> list = new ArrayList<>(sources.size());
ObjenesisStd objenesisStd = objenesisStdThreadLocal.get();
for (Object source : sources) {
if (source == null) {
throw new DWRuntimeException("转换异常");
}
T newInstance = objenesisStd.newInstance(target);
BeanCopier beanCopier = getCacheBeanCopier(source.getClass(), target);
beanCopier.copy(source, newInstance, null);
list.add(newInstance);
}
return list;
}
public static <T> T mapToBean(Map<?, ?> source, Class<T> target) {
T bean = objenesisStdThreadLocal.get().newInstance(target);
BeanMap beanMap = BeanMap.create(bean);
beanMap.putAll(source);
return bean;
}
public static <T> Map<?, ?> beanToMap(T source) {
return BeanMap.create(source);
}
private static <S, T> BeanCopier getCacheBeanCopier(Class<S> source, Class<T> target) {
ConcurrentHashMap<Class<?>, BeanCopier> copierConcurrentHashMap = cache.computeIfAbsent(source, aClass -> new ConcurrentHashMap<>(16));
return copierConcurrentHashMap.computeIfAbsent(target, aClass -> BeanCopier.create(source, target, false));
}
}

+ 2
- 1
demo-athenaopt_backend/pom.xml View File

@ -32,9 +32,10 @@
<nexus.ip>https://repo.digiwincloud.com.cn/maven</nexus.ip>
<revision>1.1.0.0</revision>
<spring.version>5.0.5.RELEASE</spring.version>
<api.version>5.2.0.1029</api.version>
<api.version>5.2.0.1085</api.version>
<dwgson.version>2.8.6</dwgson.version>
<DWQueue.version>1.05</DWQueue.version>
<netty.version>4.1.67.Final</netty.version>
</properties>
<dependencies>


Loading…
Cancel
Save