SpringBoot自定义staters

SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器)

Posted by Sunfy on 2020-10-11
Words 796 and Reading Time 3 Minutes
Viewed Times
Viewed Times
Visitors In Total

SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入springboot 为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。即使是这样,springboot也不能囊括我们所有的使用场景,往往我们需要自定义starter,来简化我们对springboot的使用。

官网中starter的相关介绍

1、官网简介

入门程序是一组便捷的依赖项描述符,您可以在应用程序中包括它们。您可以一站式购买所需的所有Spring和相关技术,而不必遍历示例代码和依赖描述符的复制粘贴负载。例如,如果要开始使用Spring和JPA进行数据库访问,请spring-boot-starter-data-jpa在项目中包括依赖项。

入门程序包含许多启动项目并快速运行所需的依赖项,并且具有一组受支持的受管传递性依赖项。

image-20210119111957403

2、官网推荐命名

官方starter名称

image-20210119112125961

推荐的自建starter命名

thirdpartyproject-spring-boot-starter.

官方命名空间

  • 前缀:spring-boot-starter-
  • 模式:spring-boot-starter-模块名
  • 举例:spring-boot-starter-web、spring-boot-starter-jdbc

自定义命名空间

  • 后缀:-spring-boot-starter
  • 模式:模块-spring-boot-starter
  • 举例:mybatis-spring-boot-starter

命名规范可以参看myBatis命名,SpringBoot关于MyBatis的Stater是MyBatis提供的,并非SpringBoot提供。

image-20210119112849108

image-20210119112928679

mybatis-spring-boot-starter依赖mybatis-spring-boot-autoconfigure

3、自定义starter

1. 启动器模块

  • 根据命名规范创建模块
  • 空的jar文件,仅仅提供辅助性依赖管理,这些依赖可能用于自动装配或其他类库。
  • 需要专门写一个类似spring-boot-autoconfigure的配置模块
  • pom依赖中添加autoconfigure项目依赖
  • 用的时候只需要引入启动器starter,就可以使用自动配置了

2. 自动配置模块

创建 xxxxx-spring-boot-autoconfigure项目,并配置自动配置类

不需要启动类

1
2
3
4
5
6
7
8
9
10
11
12
@Configuration  //指定这个类是一个配置类
@ConditionalOnXXX //指定条件成立的情况下自动配置类生效
@AutoConfigureOrder //指定自动配置类的顺序
@Bean //向容器中添加组件
@ConfigurationProperties //结合相关xxxProperties来绑定相关的配置
@EnableConfigurationProperties //让xxxProperties生效加入到容器中

// 自动配置类要能加载需要将自动配置类,配置在META-INF/spring.factories中
// demo
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// -------------自动配置类-------------
@Configuration
@ConditionalOnProperty(value = "hello.name")
@EnableConfigurationProperties(HelloProperties.class)
public class HelloAutoConfitguration {

@Autowired
HelloProperties helloProperties;

@Bean
public IndexController indexController(){
return new IndexController(helloProperties);
}
}
// -------------属性注入-------------
@ConfigurationProperties("hello")
public class HelloProperties {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
// -------------具体业务处理-------------
@RestController
public class IndexController {

HelloProperties helloProperties;

public IndexController(HelloProperties helloProperties) {
this.helloProperties=helloProperties;
}

@RequestMapping("/")
public String index(){
return helloProperties.getName();
}

}
1
2
3
// -------------spring.factories配置类-------------
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.starter.HelloAutoConfitguration

4、项目安装

使用maven命令将两个项目安装至maven仓库,然后在其他项目中就可以引入starter,配置文件中根据自定义的starter规则配置,直接就可以实现开箱即用。


Copyright 2021 sunfy.top ALL Rights Reserved

...

...

00:00
00:00