Spring Boot Starter 是一组 Maven 依赖的集合,旨在简化 Spring Boot 应用的配置。每个 Starter 通常包括所需的库、自动配置类、属性文件等,使得开发者只需简单地添加一个 Starter,就可以快速启动所需的功能。
例如,spring-boot-starter-web
包含了构建 Web 应用所需的所有依赖,包括 Spring MVC、Jackson 等。
自定义 Starter 主要有以下几个原因:
接下来,我们将通过创建一个简单的自定义 Starter 来逐步了解其实现过程。我们将创建一个名为 my-spring-boot-starter
的 Starter,它提供一个简单的服务打印消息。
首先,我们需要创建一个 Maven 项目,命名为 my-spring-boot-starter
。项目结构如下:
my-spring-boot-starter
│
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── mystarter
│ │ ├── MyService.java
│ │ └── MyAutoConfiguration.java
│ └── resources
│ └── META-INF
│ └── spring.factories
pom.xml
在 pom.xml 中,添加 Spring Boot 的相关依赖和插件配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-spring-boot-starter</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
<spring.boot.version>2.7.5</spring.boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这里引入了 spring-boot-autoconfigure
依赖,它提供了自动配置所需的功能。
在 MyAutoConfiguration.java
中,我们将定义自动配置的逻辑:
package com.example.mystarter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
public class MyAutoConfiguration {
@Bean
public MyService myService() {
return new MyService("Hello from MyService!");
}
}
这里,我们创建了一个 MyService
的 Bean,并在其中传递了一条消息。
在 MyService.java
中,我们定义一个简单的服务类,用于打印消息:
package com.example.mystarter;
public class MyService {
private final String message;
public MyService(String message) {
this.message = message;
}
public void printMessage() {
System.out.println(message);
}
}
为了让 Spring Boot 自动加载我们的配置类,我们需要在 src/main/resources/META-INF/spring.factories
文件中添加如下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.mystarter.MyAutoConfiguration
这告诉 Spring Boot 在启动时要加载我们的自动配置类。
完成自定义 Starter 的开发后,我们可以在其他 Spring Boot 项目中使用它。首先,在需要使用该 Starter 的项目中添加 Maven 依赖:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
接下来,我们可以通过 Spring 上下文获取 MyService
的 Bean,并调用其方法:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
@Autowired
private MyService myService;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
myService.printMessage();
}
}
通过以上步骤,我们成功自定义了一个 Spring Boot Starter,并在其他 Spring Boot 项目中使用它。自定义 Starter 不仅提高了代码的复用性,还简化了项目配置。
自定义 Starter 的关键点:
spring.factories
注册自动配置。希望通过这篇文章,你可以晓得如何自定义一个 Spring Boot Starter,并将其应用于实际项目中。快乐编程???!