mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-05-20 23:13:25 +08:00
优化
This commit is contained in:
@@ -27,8 +27,10 @@ import org.hswebframework.web.bean.FastBeanCopier;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
@@ -37,9 +39,11 @@ import java.util.function.Supplier;
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class MapperEntityFactory implements EntityFactory, BeanFactory {
|
||||
private Map<Class, Mapper> realTypeMapper = new HashMap<>();
|
||||
private Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
private Map<String, PropertyCopier> copierCache = new HashMap<>();
|
||||
@SuppressWarnings("all")
|
||||
private final Map<Class<?>, Mapper> realTypeMapper = new ConcurrentHashMap<>();
|
||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
@SuppressWarnings("all")
|
||||
private final Map<String, PropertyCopier> copierCache = new ConcurrentHashMap<>();
|
||||
|
||||
private static final DefaultMapperFactory DEFAULT_MAPPER_FACTORY = clazz -> {
|
||||
String simpleClassName = clazz.getPackage().getName().concat(".Simple").concat(clazz.getSimpleName());
|
||||
@@ -68,6 +72,16 @@ public class MapperEntityFactory implements EntityFactory, BeanFactory {
|
||||
this.realTypeMapper.putAll(realTypeMapper);
|
||||
}
|
||||
|
||||
public <T> MapperEntityFactory addMapping(Class<T> target, Supplier<? extends T> mapper) {
|
||||
realTypeMapper.put(target, new Mapper(target, mapper));
|
||||
return this;
|
||||
}
|
||||
|
||||
public <T> MapperEntityFactory addMappingIfAbsent(Class<T> target, Supplier<? extends T> mapper) {
|
||||
realTypeMapper.putIfAbsent(target, new Mapper(target, mapper));
|
||||
return this;
|
||||
}
|
||||
|
||||
public <T> MapperEntityFactory addMapping(Class<T> target, Mapper<? extends T> mapper) {
|
||||
realTypeMapper.put(target, mapper);
|
||||
return this;
|
||||
@@ -216,8 +230,8 @@ public class MapperEntityFactory implements EntityFactory, BeanFactory {
|
||||
}
|
||||
|
||||
public static class Mapper<T> {
|
||||
Class<T> target;
|
||||
Supplier<T> instanceGetter;
|
||||
final Class<T> target;
|
||||
final Supplier<T> instanceGetter;
|
||||
|
||||
public Mapper(Class<T> target, Supplier<T> instanceGetter) {
|
||||
this.target = target;
|
||||
@@ -242,16 +256,17 @@ public class MapperEntityFactory implements EntityFactory, BeanFactory {
|
||||
}
|
||||
|
||||
static class DefaultInstanceGetter<T> implements Supplier<T> {
|
||||
Class<T> type;
|
||||
final Constructor<T> constructor;
|
||||
|
||||
@SneakyThrows
|
||||
public DefaultInstanceGetter(Class<T> type) {
|
||||
this.type = type;
|
||||
this.constructor = type.getConstructor();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public T get() {
|
||||
return type.newInstance();
|
||||
return constructor.newInstance();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user