1、背景
在有些时候,不同环境可能需要用代码不同模块的能力,但是不同环境的项目包是一致的。这块我们想到的最简单的办法是在maven打包的时候打不同的模块,但是这样往往需要出多个包,虽然这种方式是正路但运维同学嫌麻烦。第二种方式是在spring扫包时候排除指定的排除的类或者模块,针对模块来说则需要自己实现,作者经过测试发现这种方式存在很大的问题,网上大面积是这种解决方案,基本都是乱抄。第三种方式则是采用spring的后置处理器实现。下边作者把这几种方式的实现大概写下。
2、maven打包方式
这种方式通过传不同的abc进行出包,但不是我们想要的方式。mvn package a b c
3、使用@ConponentScan注解
现在一般项目都用Springboot开发,直接用@SpringBootApplication即可,该注解提供了baseScan的路劲配置能力,但是在exclude掉不想要的模块时就显得力不从心。我们打开@SprinbootApplication注解时发现其为三个注解的整合,其参数basescan**本质就是@ConponentScan注解,但是@SpringBootApplication无法定制化exclude能力,所以我们将@SpringBootApplication里的三个注解提炼出来,替代@SpringbootApplication然后改造如下:
@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(includeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class))
public static void main(string[] args){
Springbootapplication.run(a.class);
}
注意这