配置排序依赖技巧
org.springframework.boot.autoconfigure 下的注解:
1 | @AutoConfigureAfter |
前 3 个是不能在普通项目中使用的,这 3 个注解是特地用于 autoconfigure 类的项目,后面 3 个注解是可以用于我们自己项目中的。
autoconfigure 类项目
在 Spring Boot starter 开发规范中,项目中会有一个空的名为 xxx-spring-boot-starter 的项目,这个项目主要靠 pom.xml 将所有需要的依赖引入进来。同时项目还会有一个 xxx-spring-boot-autoconfigure 项目,这个项目主要写带 @Configuration 注解的配置类,在这个类或者类中带 @Bean 的方法上,可以使用和顺序有关的注解,也就是前面提到的自己不能使用的这部分注解。xxx-spring-boot-autoconfigure 就是这里提到的 autoconfigure 类项目。
上面的注解只在 AutoConfigurationSorter 类中排序时用到了。被排序的这些类,都是通过 xxx-spring-boot-autoconfigure 项目中的 src/resources/META-INF/spring.factories 配置文件获取的,这个文件中的配置内容一般为
1 | # Auto Configure |
Spring Boot 只会对从这个文件读取的配置类进行排序。
但是你不要以为将自己的配置类也配置在 spring.factories 中就能实现排序,如果你的类被自己 Spring Boot 启动类扫描到了,这个类的顺序会优先于所有通过 spring.factories 读取的配置类。所以当你的配置类对顺序有要求时就会出错。
外部配置加载
Spring Boot 支持多种外部配置方式,如下所示,从上往下加载优先级由高到低,内容相同时覆盖,不相同时累加。
1 | 命令行参数 |
所以,当发现排序问题的时候:我还是用了@AutoConfigureOrder(-10000)解决的。感觉这样会不会有点残暴。。。