一、Spring Boot Starter是什么?
Spring Boot Starter提供了快速启动Spring Boot工程的方式,通过对众多依赖的封装,开发者无需关心版本兼容性和配置文件,只需一个依赖,即可快速启动开发。
例如,如果需要使用JPA,只需在maven中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
这样就可以启动一个基于Spring Boot和JPA的项目,可以自动配置DataSource、TransactionManager、EntityManager等。
二、Spring Boot Starter分类
Spring Boot Starter有很多种,每一种都封装了不同的功能,常见几种Spring Boot Starter如下:
1. spring-boot-starter-web
提供了运行基于web的应用程序所需的所有依赖项。包括Spring MVC、Tomcat等。
2. spring-boot-starter-data-jpa
提供了集成JPA所需的所有依赖项。包括Hibernate、Spring Data JPA、Spring ORM等。
3. spring-boot-starter-test
提供了编写测试所需的所有依赖项。包括JUnit、Mockito、Hamcrest等。
4. spring-boot-starter-actuator
提供了监视和管理应用程序的依赖项。包括Health、Metrics、Info等。
5. spring-boot-starter-security
提供了安全框架所需的所有依赖项。包括Spring Security、Spring Security OAuth2等。
三、Spring Boot Starter使用示例
下面以spring-boot-starter-data-jpa为例,演示如何使用Spring Boot Starter。
1. 创建Maven项目,在pom.xml中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2. 创建一个实体类:
import javax.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Integer age;
// getter、setter、toString省略
}
3. 创建一个Repository:
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
4. 编写测试用例:
import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Autowired
UserRepository userRepository;
@Test
void contextLoads() {
User user = new User();
user.setName("Bob");
user.setAge(20);
userRepository.save(user);
System.out.println(user.getId());
}
}
注意:测试用例必须在Spring Boot环境下运行,需要使用@SpringBootTest注解。
四、Spring Boot Starter如何编写自己的Starter?
以上是对Spring Boot Starter的简单介绍,如果希望编写自己的Spring Boot Starter,可以按照以下步骤:
1. 创建一个Maven项目;
2. 在pom.xml中添加以下插件:
<build>
<plugins>
<!-- 将项目打包为jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 将项目打包为Spring Boot Starter -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>starters</id>
<phase>generate-resources</phase>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>starter</classifier>
<includes>
<include>com/example/myapp/**</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
3. 在src/main/java目录下创建自己的Starter:
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnClass(MyClass.class)
public class MyStarterAutoConfiguration {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
上述代码中,MyClass是自己编写的类,MyService和MyServiceImpl是自己编写的Service接口和实现类。
4. 在src/main/resources/META-INF/spring.factories文件中增加自己的配置:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.mystarter.MyStarterAutoConfiguration
这样就完成了自己的Spring Boot Starter编写,可以通过在项目中添加该Starter的依赖,来使用自己的Starter。