Starter 命名规范
官方的 Starter 遵循 spring-boot-starter-*
的命名模式,如 spring-boot-starter-data-jpa
。第三方的 Starter 通常以自己的项目名称开始,例如,名为 thirdpartyproject 的第三方入门项目通常被命名为 thirdpartyproject-spring-boot-starter
。
自定义 Starter
创建 Starter 工程
使用 maven-archetype-quickstart
架手架创建一个 Maven 工程,artifactId 设置为 zombie-spring-boot-starter
。
在 pom.xml
文件中引入依赖的 jar 包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.1.7.RELEASE</version> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.1.7.RELEASE</version> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> </dependencies>
|
设置以 jar 包的方式打包:
1
| <packaging>jar</packaging>
|
定义服务类
定义一个服务类 ZombieService
:
1 2 3 4 5 6 7 8 9
| public class ZombieService {
public Zombie setZombie(String name, Integer age) { Zombie zombie = new Zombie(); zombie.setName(name); zombie.setAge(age); return zombie; } }
|
定义配置类
定义一个自动配置类,一般是以 *AutoConfiguration
的形式命名的。
1 2 3 4 5 6 7 8 9 10
| @Configuration @ConditionalOnClass(ZombieService.class) public class ZombieAutoConfiguration {
@Bean @ConditionalOnMissingBean(ZombieService.class) public ZombieService zombieService() { return new ZombieService(); } }
|
常用的注解
@ConditionalOnClass:当类路径classpath下有指定的类的情况下进行自动配置
@ConditionalOnMissingClass:当类路径下没有指定的类的条件下
@ConditionalOnBean:当容器(Spring Context)中有指定的Bean的条件下
@ConditionalOnMissingBean:当容器(Spring Context)中没有指定Bean的情况下进行自动配置
配置 spring.factories
在 resources/META-INF/spring.factories
下配置自动配置类。如果没有该文件的话,需要手动创建。
1
| org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.qinghuazs.zombie.auto.ZombieAutoConfiguration
|
打包发布
在发布之前需要在 pom.xml
文件中配置仓库信息
1 2 3 4 5 6 7 8 9 10 11 12
| <distributionManagement> <repository> <id>qinghuazs-release</id> <name>qinghuazs-release</name> <url>http://af.qinghuazs.com.cn:80/artifactory/maven-qinghuazs-release</url> </repository> <snapshotRepository> <id>qinghuazs-snapshot</id> <name>qinghuazs-snapshot</name> <url>http://af.qinghuazs.com.cn:80/artifactory/maven-qinghuazs-snapshot</url> </snapshotRepository> </distributionManagement>
|
进行发布
1 2
| # mvn clean install # mvn deploy
|
测试
新建测试项目,并在 pom.xml
中引入自定义的 Starter:
1 2 3 4 5
| <dependency> <groupId>com.qinghuazs</groupId> <artifactId>zombie-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
|
自建 Controller 类,并引入 Starter 中的类:
1 2 3 4 5 6 7 8 9 10 11
| @RestController public class TestController {
@Autowired private ZombieService zombieService;
@GetMapping("/test") public String test() { return zombieService.setZombie("qinghuazs", 11).toString(); } }
|
使用 Postman 测试,输出结果如下:
1
| Zombie(name=qinghuazs, age=11)
|