feat[boot]: 支持spring boot的自动化配置

This commit is contained in:
jaysunxiao committed 2021-09-07 15:32:59 +08:00
1 parent 47be79785e
commit 44e4782641
37 files changed
+657 -219

No files matched your search

@@ -13,7 +13,6 @@
package com.zfoo.storage;
import com.zfoo.protocol.util.StringUtils;
import com.zfoo.scheduler.model.StopWatch;
import com.zfoo.storage.interpreter.IResourceReader;
import com.zfoo.storage.manager.IStorageManager;
@@ -24,9 +23,7 @@ import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ApplicationContextEvent;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.support.ConversionServiceFactoryBean;
import org.springframework.core.Ordered;
import org.springframework.core.convert.ConversionService;
/**
* @author jaysunxiao
@@ -44,8 +41,6 @@ public class StorageContext implements ApplicationListener<ApplicationContextEve
private IStorageManager storageManager;
private ConversionService conversionService;
public static StorageContext getStorageContext() {
return instance;
}
@@ -58,10 +53,6 @@ public class StorageContext implements ApplicationListener<ApplicationContextEve
return instance;
}
public static ConversionService getConversionService() {
return instance.conversionService;
}
public static IResourceReader getResourceReader() {
return instance.resourceReader;
}
@@ -78,7 +69,6 @@ public class StorageContext implements ApplicationListener<ApplicationContextEve
// 初始化上下文
StorageContext.instance = this;
instance.applicationContext = event.getApplicationContext();
instance.conversionService = (ConversionService) applicationContext.getBean(StringUtils.uncapitalize(ConversionServiceFactoryBean.class.getName()));
instance.resourceReader = applicationContext.getBean(IResourceReader.class);
instance.storageManager = applicationContext.getBean(IStorageManager.class);
@@ -16,13 +16,14 @@ package com.zfoo.storage.interpreter;
import com.zfoo.protocol.exception.RunException;
import com.zfoo.protocol.util.ReflectionUtils;
import com.zfoo.protocol.util.StringUtils;
import com.zfoo.storage.StorageContext;
import com.zfoo.storage.model.anno.Id;
import com.zfoo.storage.strategy.*;
import com.zfoo.storage.util.CellUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.context.support.ConversionServiceFactoryBean;
import org.springframework.core.convert.TypeDescriptor;
import java.io.IOException;
@@ -40,6 +41,20 @@ public class ExcelResourceReader implements IResourceReader {
private static final TypeDescriptor TYPE_DESCRIPTOR = TypeDescriptor.valueOf(String.class);
private static final ConversionServiceFactoryBean conversionServiceFactoryBean = new ConversionServiceFactoryBean();
static {
var converters = new HashSet<>();
converters.add(new JsonToArrayConverter());
converters.add(new JsonToMapConverter());
converters.add(new JsonToObjectConverter());
converters.add(new StringToClassConverter());
converters.add(new StringToDateConverter());
converters.add(new StringToMapConverter());
conversionServiceFactoryBean.setConverters(converters);
conversionServiceFactoryBean.afterPropertiesSet();
}
@Override
public <T> List<T> read(InputStream inputStream, Class<T> clazz) {
var wb = createWorkbook(inputStream, clazz);
@@ -90,7 +105,7 @@ public class ExcelResourceReader implements IResourceReader {
private void inject(Object instance, Field field, String content) {
try {
var targetType = new TypeDescriptor(field);
var value = StorageContext.getConversionService().convert(content, TYPE_DESCRIPTOR, targetType);
var value = conversionServiceFactoryBean.getObject().convert(content, TYPE_DESCRIPTOR, targetType);
ReflectionUtils.makeAccessible(field);
ReflectionUtils.setField(field, instance, value);
} catch (Exception e) {
@@ -19,17 +19,12 @@ import com.zfoo.storage.StorageContext;
import com.zfoo.storage.interpreter.ExcelResourceReader;
import com.zfoo.storage.manager.StorageManager;
import com.zfoo.storage.model.config.StorageConfig;
import com.zfoo.storage.strategy.*;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.context.support.ConversionServiceFactoryBean;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.List;
/**
* @author jaysunxiao
* @version 3.0
@@ -97,20 +92,6 @@ public class StorageDefinitionParser implements BeanDefinitionParser {
name = StringUtils.uncapitalize(clazz.getName());
builder = BeanDefinitionBuilder.rootBeanDefinition(clazz);
registry.registerBeanDefinition(name, builder.getBeanDefinition());
// 注入ConversionServiceFactoryBean
clazz = ConversionServiceFactoryBean.class;
name = StringUtils.uncapitalize(clazz.getName());
builder = BeanDefinitionBuilder.rootBeanDefinition(clazz);
List<Object> converters = new ArrayList<>();
converters.add(new JsonToArrayConverter());
converters.add(new JsonToMapConverter());
converters.add(new JsonToObjectConverter());
converters.add(new StringToClassConverter());
converters.add(new StringToDateConverter());
converters.add(new StringToMapConverter());
builder.addPropertyValue("converters", converters);
registry.registerBeanDefinition(name, builder.getBeanDefinition());
}
private void resolvePlaceholder(String attributeName, String fieldName, BeanDefinitionBuilder builder, Element element, ParserContext parserContext) {