3、自定义 starter
使用第三方写好的starter时,在引入后观察依赖结构,会有一个依赖负责写 AutoConfiguration ,一个负责声明当前 Starter 需要的其他依赖。
这个依赖并没有内容,自动配置类在另一个依赖里面
所以自定义 starter 也一样,同样创建一个 maven 工程负责写自动配置和功能,一个负责写场景要的依赖。
总有一个文件叫 spring.factories 在这里面记载了程序启动时需要加载的一些配置,之前在初学SpringBoot的自动配置原理 时知道,程序启动时会自动加载读取这个 spring.factories 配置文中的配置,加载相关的配置类组件。 所以自定义Starter也需要一个 spring.factories 文件
场景步骤:
1、首先创建一个空项目,然后添加两个maven模块,一个叫 self-starter-spring-boot 【第三方的starter都是 场景名-starter-spring-boot ,spring提供的starter是spring-boot-场景名-starter】 做为场景启动器,一个叫 selt-spring-boot-myselfServiceAutoConfigure 作为专门的配置类,在这里面写starter的配置。
可能出现的错误
如果创建项目用的是spring模板,进去就把主配置类、配置文件、自带的测试类删掉。
因为在打包的时候SoringBoot检测到这些文件后会认为你这个程序是一个SpringBoot应用然后打包前进行测试可不可用,不删完就会报错说少东西。
而且就算不删打包,打包后的依赖下载到本地仓库后被其他项目引用,也无法应用这个starter,因为autoConfigure这个包打包的时候他编写的程序在打包时被放在了 BOOT-INF 目录里面,引用starter的程序在使用依赖里面的类时无法引用,所以最好用maven创建项目自己引入做配置文件需要的依赖,要么用spring模板就删干净。
创建出来的项目的结构
2、在starter项目里面引入autoconfigue项目的依赖,他只单纯作为一个starter场景启动器。
这个依赖坐标直接去 autoconfigure 的pom文件里面复制,可以先修改的好看一些。
<dependencies>
<dependency>
<groupId>com.xl</groupId>
<artifactId>self-spring-boot-autoconfigue</artifactId>
<version>1.0.0