ResponseExcelAutoConfiguration.java 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.kxs.common.excel;
  2. import com.kxs.common.excel.aop.DynamicNameAspect;
  3. import com.kxs.common.excel.aop.RequestExcelArgumentResolver;
  4. import com.kxs.common.excel.aop.ResponseExcelReturnValueHandler;
  5. import com.kxs.common.excel.config.ExcelConfigProperties;
  6. import com.kxs.common.excel.config.FileProperties;
  7. import com.kxs.common.excel.processor.NameProcessor;
  8. import com.kxs.common.excel.processor.NameSpelExpressionProcessor;
  9. import jakarta.annotation.PostConstruct;
  10. import lombok.RequiredArgsConstructor;
  11. import org.springframework.boot.autoconfigure.AutoConfiguration;
  12. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  13. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  14. import org.springframework.context.annotation.Bean;
  15. import org.springframework.context.annotation.Import;
  16. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  17. import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
  18. import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. /**
  22. * @author 没秃顶的码农
  23. * @date 2024/07/24
  24. * <p>
  25. * 配置初始化
  26. */
  27. @AutoConfiguration
  28. @RequiredArgsConstructor
  29. @Import({ExcelHandlerConfiguration.class})
  30. @EnableConfigurationProperties({ExcelConfigProperties.class, FileProperties.class})
  31. public class ResponseExcelAutoConfiguration {
  32. private final RequestMappingHandlerAdapter requestMappingHandlerAdapter;
  33. private final ResponseExcelReturnValueHandler responseExcelReturnValueHandler;
  34. /**
  35. * SPEL 解析处理器
  36. * @return NameProcessor excel名称解析器
  37. */
  38. @Bean("ExcelNameProcessor")
  39. @ConditionalOnMissingBean
  40. public NameProcessor nameProcessor() {
  41. return new NameSpelExpressionProcessor();
  42. }
  43. /**
  44. * Excel名称解析处理切面
  45. * @param nameProcessor SPEL 解析处理器
  46. * @return DynamicNameAspect
  47. */
  48. @Bean("ExcelDynamicNameAspect")
  49. @ConditionalOnMissingBean
  50. public DynamicNameAspect dynamicNameAspect(NameProcessor nameProcessor) {
  51. return new DynamicNameAspect(nameProcessor);
  52. }
  53. /**
  54. * 追加 Excel返回值处理器 到 springmvc 中
  55. */
  56. @PostConstruct
  57. public void setReturnValueHandlers() {
  58. List<HandlerMethodReturnValueHandler> returnValueHandlers = requestMappingHandlerAdapter
  59. .getReturnValueHandlers();
  60. List<HandlerMethodReturnValueHandler> newHandlers = new ArrayList<>();
  61. newHandlers.add(responseExcelReturnValueHandler);
  62. assert returnValueHandlers != null;
  63. newHandlers.addAll(returnValueHandlers);
  64. requestMappingHandlerAdapter.setReturnValueHandlers(newHandlers);
  65. }
  66. /**
  67. * 追加 Excel 请求处理器 到 springmvc 中
  68. */
  69. @PostConstruct
  70. public void setRequestExcelArgumentResolver() {
  71. List<HandlerMethodArgumentResolver> argumentResolvers = requestMappingHandlerAdapter.getArgumentResolvers();
  72. List<HandlerMethodArgumentResolver> resolverList = new ArrayList<>();
  73. resolverList.add(new RequestExcelArgumentResolver());
  74. resolverList.addAll(argumentResolvers);
  75. requestMappingHandlerAdapter.setArgumentResolvers(resolverList);
  76. }
  77. }