Spring Boot Starter能用来做什么

Spring Boot Starter一般用来在项目中自动装配一些配置文件,实现项目启动零配置。

在最近写一个Starter时候发现Filter使用org.springframework.boot.autoconfigure.EnableAutoConfiguration可以自动生效,但Interceptor则不会,开始以为必须在项目中通过继承WebMvcConfigurationSupport来注入。

偶然发现另外一种方式可以不用在项目中额外引入一个Config文件来使制定一个Interceptor生效。

解决方案

  • Starter中创建一个注解EnableParam

    1
    2
    3
    4
    5
    6
    
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Import(ParaImportSelector.class)
    public @interface EnableParam {
    }
    
  • Starter中创建一个ImportSelector

    1
    2
    3
    4
    5
    6
    7
    8
    
    public class ParaImportSelector implements ImportSelector {
        @Override
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            return new String[]{
                    "com.au92.common.web.config.DefaultWebMvcConfig"
            };
        }
    }
    
  • Starter中创建Config来拦截URL

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    @Configuration
    @AutoConfigureAfter(WebMvcConfigurationSupport.class)
    public class DefaultWebMvcConfig extends WebMvcConfigurationSupport {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new ParamInterceptor()).addPathPatterns("/**");
            super.addInterceptors(registry);
        }
    }
    
  • 在SpringBoot的启动文件上增加这个注解

    1
    2
    3
    4
    5
    6
    7
    8
    
    @SpringBootApplication
    @EnableParam
    public class WebApplication {
        public static void main(String[] args) {
            SpringApplication.run(WebApplication.class, args);
        }
    
    }
    

这时候再启动Spring Boot项目时候,自定义的Interceptor就会自动生效了,不需要再在Spring Boot项目中创建一个Config继承咱们在Starter中的DefaultWebMvcConfig了。