Spring Boot Starter使Interceptor自动生效
文章目录
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了。
文章作者 P.X.C
上次更新 2019-10-03
许可协议 不允许任何形式转载。