下面我将为您详细讲解“SpringBoot实现自定义启动器的示例详解”。
一、什么是自定义启动器
在SpringBoot应用中,我们会使用很多依赖项,每个依赖项都需要配置一些基本的内容,为了方便我们的使用,SpringBoot提供了自定义启动器的机制。自定义启动器简单来说,就是一个依赖项,可以封装一系列的配置,使其它应用可以在不了解具体细节的情况下使用这个依赖。
二、自定义启动器需要关注哪些点
自定义启动器需要关注以下几点:
- 自定义配置类的编写;
- 自定义启动器的SPI的编写;
- 创建对应的自动化配置类和starter包;
- 添加starter的依赖。
三、具体步骤:
1.自定义配置类的编写
首先我们需要配置一个自定义的配置类,用来定义我们的starter的属性。
@ConfigurationProperties("hello")
public class HelloProperties {
private String msg = "hello world";
// 省略getter和setter方法
}
@ConfigurationProperties("hello")
:用来声明我们要将这个类注入一个spring的bean之中,其中hello用来告诉Spring我要绑定哪个属性。
2.自定义启动器的SPI的编写
然后我们需要编写一个自定义的SPI,在META-INF/spring.factories文件中定义SPI的实现类:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.starter.HelloAutoConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration
:表示我们要让Spring自动配置这个类。com.example.starter
:我们自己编写的自动化配置类所在的包路径。
3.创建自动化配置类
接下来我们需要编写自动化配置类HelloAutoConfiguration,它使用@Configuration注解将我们定义的启用配置属性类和配置生成一个bean。
@Configuration
@EnableConfigurationProperties(HelloProperties.class)
public class HelloAutoConfiguration {
private final HelloProperties helloProperties;
public HelloAutoConfiguration(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
@Bean
public HelloService helloService() {
return new HelloService(helloProperties.getMsg());
}
}
@Configuration
:告诉Spring这个类是一个bean的配置类。@EnableConfigurationProperties(HelloProperties.class)
:告诉Spring我们要引入HelloProperties这个类。public HelloAutoConfiguration(HelloProperties helloProperties)
:注入HelloProperties。@Bean
:生成的bean。
4.创建starter包
接下来我们需要创建一个starter包,将以上所有内容放入其中:
spring-boot-starter-hello
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── starter
│ │ ├── HelloAutoConfiguration.java
│ │ ├── HelloProperties.java
│ │ └── HelloService.java
│ └── resources
│ └── META-INF
│ └── spring.factories
└── test
└── java
└── com
└── example
└── starter
└── HelloServiceTest.java
5.添加starter的依赖
最后我们需要将这个starter添加到其他项目中,在pom.xml中添加以下配置:
<dependency>
<groupId>com.example</groupId>
<artifactId>spring-boot-starter-hello</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
四、示例
- 示例一:Hello World
我们直接使用SpringBoot提供的Starter机制,可以快速搭建一个SpringBoot项目:
<!-- 在pom.xml中添加以下依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 创建一个HelloController类 -->
@RestController
public class HelloController {
@RequestMapping("/")
public String index() {
return "Hello World!";
}
}
<!-- 测试访问此地址 -->
http://localhost:8080/
- 示例二:使用我们自定义的starter
接下来我们用我们自定义的starter替换之前的HelloController:
<!-- 在pom.xml中添加以下依赖 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>spring-boot-starter-hello</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 在application.yml中添加以下配置 -->
hello:
msg: "Hello, World!"
<!-- 修改我们的Controller类 -->
@RestController
public class HelloController {
private final HelloService helloService;
public HelloController(HelloService helloService) {
this.helloService = helloService;
}
@RequestMapping("/")
public String index() {
return helloService.sayHello();
}
}
测试访问此地址:
http://localhost:8080/
应返回:
Hello, World!
至此,我们就完成了一个简单的SpringBoot自定义启动器的过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot实现自定义启动器的示例详解 - Python技术站