com.kangaroohy.plugin.excel.ResponseExcelAutoConfiguration Maven / Gradle / Ivy
package com.kangaroohy.plugin.excel;
import com.kangaroohy.plugin.excel.aop.DynamicNameAspect;
import com.kangaroohy.plugin.excel.aop.RequestExcelArgumentResolver;
import com.kangaroohy.plugin.excel.aop.ResponseExcelReturnValueHandler;
import com.kangaroohy.plugin.excel.config.ExcelConfigProperties;
import com.kangaroohy.plugin.excel.head.EmptyHeadGenerator;
import com.kangaroohy.plugin.excel.processor.NameProcessor;
import com.kangaroohy.plugin.excel.processor.NameSpelExpressionProcessor;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
/**
* @author kangaroohy
* @date 2020/3/29
*
* 配置初始化
*/
@AutoConfiguration
@RequiredArgsConstructor
@Import(ExcelHandlerConfiguration.class)
@EnableConfigurationProperties(ExcelConfigProperties.class)
public class ResponseExcelAutoConfiguration {
private final RequestMappingHandlerAdapter requestMappingHandlerAdapter;
private final ResponseExcelReturnValueHandler responseExcelReturnValueHandler;
/**
* SPEL 解析处理器
* @return NameProcessor excel名称解析器
*/
@Bean
@ConditionalOnMissingBean
public NameProcessor nameProcessor() {
return new NameSpelExpressionProcessor();
}
/**
* Excel名称解析处理切面
* @param nameProcessor SPEL 解析处理器
* @return DynamicNameAspect
*/
@Bean
@ConditionalOnMissingBean
public DynamicNameAspect dynamicNameAspect(NameProcessor nameProcessor) {
return new DynamicNameAspect(nameProcessor);
}
/**
* 追加 Excel返回值处理器 到 springmvc 中
*/
@PostConstruct
public void setReturnValueHandlers() {
List returnValueHandlers = requestMappingHandlerAdapter
.getReturnValueHandlers();
List newHandlers = new ArrayList<>();
newHandlers.add(responseExcelReturnValueHandler);
assert returnValueHandlers != null;
newHandlers.addAll(returnValueHandlers);
requestMappingHandlerAdapter.setReturnValueHandlers(newHandlers);
}
/**
* 空的 Excel 头生成器
* @return EmptyHeadGenerator
*/
@Bean
@ConditionalOnMissingBean
public EmptyHeadGenerator emptyHeadGenerator() {
return new EmptyHeadGenerator();
}
/**
* 追加 Excel 请求处理器 到 springmvc 中
*/
@PostConstruct
public void setRequestExcelArgumentResolver() {
List argumentResolvers = requestMappingHandlerAdapter.getArgumentResolvers();
List resolverList = new ArrayList<>();
resolverList.add(new RequestExcelArgumentResolver());
resolverList.addAll(argumentResolvers);
requestMappingHandlerAdapter.setArgumentResolvers(resolverList);
}
}