在使用springboot的时候,只需要添加一些starter依赖,就能极大地简化开发操作,那么如何自定义一个starter?
创建简单的 starter 项目
这个项目不需要特别多的依赖,只需一个
1 | implementation("org.springframework.boot:spring-boot-autoconfigure") |
编写service,这是我们需要自动配置的服务。
1 | public interface HelloService { |
编写配置文件
1 |
|
接着在resources
文件夹下创建META-INF
文件夹,在文件夹中创建spring.factories
文件,文件内容为:
注意修改自己的包名
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=net.peihuan.starterdemo.config.AutoConfiguration |
代码编写完成了,现在需要发布 jar 包,这里我使用了nexus搭建的私有仓库。
修改build.gradle
文件如下:
1 | buildscript { |
如果发布出现一些奇怪的错误,检查下gradle版本,这里给出使用的
1 | distributionBase=GRADLE_USER_HOME |
你也可以发布到本地maven仓库,这样更简单。
创建测试项目引入starter
只需要在build.gradle
文件中添加自己的私有仓库地址和依赖即可。
修改一下入口,执行后能看到打印出了HelloService
对象的地址,所以自动配置成功了。
1 |
|
为什么需要 spring.factories
starter为什么要添加 spring.factories 文件?可以试着删掉这个文件,然后添加一个主入口并执行
1 |
|
会发现没有了spring.factories
,依旧能打印出HelloService
对象的内存地址,自动装配了HelloService
实例。
既然如此,为什么还需要这个文件?删掉spring.factories
,打一个新jar包,测试项目引入新jar包后,运行后将无法自动装配这个类。具体原理可以看这篇文章spring源码阅读(二)——自动配置