您的位置:

Spring Boot Starter详解

一、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。