一,简介
命名规则:
Spring 官方 Starter通常命名为 spring-boot-starter-{name} 如 spring-boot-starter-web 。
Spring官方建议非官方Starter命名应遵循 {name}-spring-boot-starter 的格式。
步骤:
1.创建读取配置文件信息的properties类(非必要)
2.自定义AutoConfiguration配置类,可以通过@Condition*系列注解实现动态判断是否导入
3,在 src/main/resources 下创建目录 META-INF ,在在 META-INF下创建文件 spring.factories。
内容为
org.springframework.boot.autoconfigure.EnableAutoConfiguration= 需要装配的类的全限定名称,如 com.bxy.datasource.config.DataSourceConfig,其中DataSourceConfig为自定义的配置类。
4,使用maven 打包插件,将定义好的starter打包,其他项目就可以引用了。
二,实战
1,创建springboot项目
2,引pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3,定义实体类用来映射配置文件信息
4,定义配置类
5,创建spring.factories
6,其他项目引用
自己的打包信息
其他项目引用:
三,补充
以上就可以满足自定义starter,但测试时可能有一个重要的问题,那就是项目扫描不到自定义的配置类,这是因为@SpringBootApplication扫描包的范围是启动类所在同级包和子包,但是不包括第三方的jar包.如果需要扫描maven依赖添加的Jar,我们就要单独使用@ComponentScan注解扫描包.
解决方式:
法一:自定义配置类时,包结构和当前项目的包结构保存一直,当前项目就会通过@SpringBootApplication扫描到自定义的配置信息
法二:使用 @ComponentScan 注解,如
@ComponentScan(basePackages = {"com.bxy.datasource"})
四,总结
上面只是介绍了starter的步骤,没有具体示例代码,如果想具体时间,可以参考 : 自定义starter,实现通过注解动态切换数据源。