钟君扬的SpringBoot小课堂:如何自定义starter
文章目录
- 钟君扬的SpringBoot小课堂:如何自定义starter
- 原则:一搭环境、二写demo、三测试。
- 记忆口诀:美橡筋、春诗人、要登记
- 说明
- 一、编写启动器
- 1、在IDEA中新建一个空项目 zhong-demo-spring-boot-starter。
- 2、新建一个普通Maven模块:zhong-spring-boot-starter
- 3、再新建一个Springboot模块:zhong-spring-boot-starter-autoconfigure
- 4、点击apply即可
- 5、在我们的 starter 中 导入 autoconfigure 的依赖!
- 6、将 autoconfigure 项目下多余的文件都删掉
- 7、依次创建所需的package
- 8、我们编写一个自己的服务类
- 9、编写配置类
- 10、编写我们的自动配置类并注入bean
- 11、最重要的一步!!!
- 12、编写完成后,安装到maven仓库中
- 二、新建项目测试我们自己写的启动器
原则:一搭环境、二写demo、三测试。
记忆口诀:美橡筋、春诗人、要登记
我们将starter模块比作项目经理,他只管启动项目。将configure模块比作人事经理,他需要安排具体的人员和项目小组来完成项目。
我们可以如下记忆整个过程:
一位美丽的橡筋姑娘,要和一位春天的诗人登记结婚。
橡筋为(项目经理的谐音记法),美是Maven项目的谐音记法。美橡筋合起来表示:我们需要用maven来创建一个starter模块来作为我们的项目经理。
春诗人则是springboot、人事经理两者相结合的谐音记法。表示我们需要创建一个springboot模块来作为我们的人事经理。
要登记,则最好理解。表示将我们编写好的自动配置类,写入META-INF\spring.factories这个文件中。我们可以把这个spring.factorie文件看作是一个公司的总人事部,他管理着所有的小人事部。我们编写的自动配置类就相当于是一个个的小人事部。任何新人都需要向总人事部门报备。而这些大大小小的人事部门的根本目的,都是为我们的项目提供实际干活儿的人员,也就是各种bean。
说明
启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;
命名归约:
官方命名:
- 前缀:spring-boot-starter-xxx
- 比如:spring-boot-starter-web…
SpringBoot提供的starter以spring-boot-starter-xxx
的方式命名的。
官方建议自定义的starter使用xxx-spring-boot-starter
命名规则,以区分SpringBoot生态提供的starter。
一、编写启动器
1、在IDEA中新建一个空项目 zhong-demo-spring-boot-starter。
- 友情提示:该处的项目名称并不会影响我们最后安装到maven仓库中的模块的名字。
2、新建一个普通Maven模块:zhong-spring-boot-starter
3、再新建一个Springboot模块:zhong-spring-boot-starter-autoconfigure
- 友情提示,该项目可以不勾选任何依赖依赖,直接一直点击下一步就行了。
4、点击apply即可
5、在我们的 starter 中 导入 autoconfigure 的依赖!
<!-- 启动器 -->
<dependencies>
<!-- 引入自动配置模块 -->
<dependency>
<groupId>com.zhong</groupId>
<artifactId>zhong-spring-boot-starter-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
6、将 autoconfigure 项目下多余的文件都删掉
Pom中只留下一个 starter,将不需要的test文件夹、application应用程序等都删掉。这是所有的启动器基本配置!
7、依次创建所需的package
8、我们编写一个自己的服务类
package com.zhong.service;
import com.zhong.properties.HelloProperties;
public class HelloService {
HelloProperties helloProperties;
public HelloProperties getHelloProperties() {
return helloProperties;
}
public void setHelloProperties(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
public String sayHello(String extent){
return helloProperties.getname() + extent + helloProperties.gethobbies();
}
}
9、编写配置类
package com.zhong.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
// 前缀 zhong.hello
@ConfigurationProperties(prefix = "zhong.hello")
public class HelloProperties {
private String name;
private String hobbies;
public String getname() {
return name;
}
public void setname(String name) {
this.name = name;
}
public String gethobbies() {
return hobbies;
}
public void sethobbies(String hobbies) {
this.hobbies = hobbies;
}
}
10、编写我们的自动配置类并注入bean
package com.zhong.config;
import com.zhong.properties.HelloProperties;
import com.zhong.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//web应用生效
@ConditionalOnWebApplication
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
@Autowired
HelloProperties helloProperties;
@Bean
public HelloService helloService(){
HelloService service = new HelloService();
service.setHelloProperties(helloProperties);
return service;
}
}
11、最重要的一步!!!
- 在autoconfigure下的resources编写一个自己的 META-INF\spring.factories,将我们编写的自动配置类写入其中。
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zhong.config.HelloServiceAutoConfiguration
- 此处一定要加上package的名字,否则会报错。
出现图中的红色提示,可以暂时不用管。
12、编写完成后,安装到maven仓库中
一定记住,先安装configure,后安装starter。否则可能会出现错误!
二、新建项目测试我们自己写的启动器
1、新建一个SpringBoot 项目test-zhong-spring-boot-starter
- 记得勾选我们的SpringWeb
2、导入我们自己写的启动器
<dependency>
<groupId>com.zhong</groupId>
<artifactId>zhong-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3、编写一个 HelloController 进行测试我们自己的写的接口!
package com.zhong.controller;
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@RequestMapping("/hello")
public String hello(){
return helloService.sayHello("非常非常非常");
}
}
4、编写配置文件 application.yaml
- 大家注意,如果是采用properties格式的文件,则有中文可能在浏览器上出现乱码。
zhong:
hello:
hobbies: "亲爱的小伙伴们"
name: "君扬"