一、简介
SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入SpringBoot 为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。即使是这样,SpringBoot也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对SpringBoot的使用。
二、如何自定义starter
1.实例
如何编写自动配置 ?
我们参照@WebMvcAutoConfiguration为例,我们看看需要准备哪些东西,下面是WebMvcAutoConfiguration的部分代码:
1 |
|
我们可以抽取到我们自定义starter时,同样需要的一些配置。
1 | //指定这个类是一个配置类 |
模式
我们参照 spring-boot-starter 我们发现其中没有代码:
我们在看它的pom中的依赖中有个 springboot-starter
1 | <dependency> |
我们再看看 spring-boot-starter 有个 spring-boot-autoconfigure
1 | <dependency> |
关于web的一些自动配置都写在了这里 ,所以我们有以下总结:
1 | 启动器starter只是用来做依赖管理 |
命名规范
官方命名空间
- 前缀:spring-boot-starter-
- 模式:spring-boot-starter-模块名
- 举例:spring-boot-starter-web、spring-boot-starter-jdbc
自定义命名空间
- 后缀:-spring-boot-starter
- 模式:模块-spring-boot-starter
- 举例:mybatis-spring-boot-starter
三、自定义starter实例
我们需要先创建两个工程 hello-spring-boot-starter 和 hello-spring-boot-starter-autoconfigurer
1. hello-spring-boot-starter
1.pom.xml
1 |
|
同时删除 启动类、resources下的文件,test文件。
2. hello-spring-boot-starter-autoconfigurer
1. pom.xml
1 |
|
2. HelloProperties
1 | package com.gf.service; |
3. HelloService
1 | package com.gf.service; |
4. HelloServiceAutoConfiguration
1 | package com.gf.service; |
5. spring.factories
在 resources 下创建文件夹 META-INF 并在 META-INF 下创建文件 spring.factories ,内容如下:
1 | # Auto Configure |
到这儿,我们的配置自定义的starter就写完了 ,我们把 hello-spring-boot-starter-autoconfigurer、hello-spring-boot-starter 安装成本地jar包。
三、测试自定义starter
我们创建个项目 hello-spring-boot-starter-test,来测试系我们写的stater。
1. pom.xml
1 |
|
2. HelloController
1 | package com.gf.controller; |
3. application.properties
1 | gf.hello.prefix = hi |
我运行项目访问 http://127.0.0.1:8080/hello/zhangsan,结果如下:
1 | hi-zhangsan , what's up man ? |