一、什么是SpringBoot Starter
在 SpringBoot 项目中,使用最多的无非就是各种各样的 Starter 了。那何为 Starter
呢?你可以理解为一个可拔插式的插件(组件)。或者理解为场景启动器。
通过 Starter,能够简化以前繁杂的配置,无需过多的配置和依赖,它会帮你合并依赖,并且将其统一集成到一个 Starter 中,我们只需在 Maven
中引入 Starter 依赖即可。SpringBoot 会自动扫描需要加载的信息并启动相应的默认配置。如果你想使用 redis,你只需引入
spring-boot-starter-data-redis依赖即可。
Starter 提供了以下功能:
1、整合了模块需要的所有依赖,统一集合到 Starter 中。
2、提供了默认配置,并允许我们调整这些默认配置。
3、提供了自动配置类对模块内的 Bean 进行自动装配,注入 Spring 容器中。
Starter 命名规则
Spring 官方定义的 Starter 通常命名遵循的格式为 spring-boot-starter-{name},例如
spring-boot-starter-data-mongodb。Spring 官方建议,非官方 Starter 命名应遵循
{name}-spring-boot-starter 的格式,例如,myjson-spring-boot-starter。
二、自定义一个 Starter
我们的starter名字是sms-spring-boot-starter
现在我们有一个发送短信的功能,需要发送给不同的运营商,并且封装到starter中给各个服务使用
定义SmsProperties 配置类
@ConfigurationProperties(prefix = "sms") @Data public class SmsProperties {
private SmsMessage aliyun = new SmsMessage(); private SmsMessage tencent = new
SmsMessage(); @Data public static class SmsMessage{ private String userName;
private String password; private String url; private String sign; } }
定义SmsAutoConfiguration
自动配置类,并通过@EnableConfigurationProperties把SmsProperties和配置文件application.yml进行绑定,同时注册到spring容器中
@EnableConfigurationProperties(SmsProperties.class) public class
SmsAutoConfiguration { @Bean public AliYunSmsServiceImpl aliYunSmsService(
SmsProperties properties) { return new AliYunSmsServiceImpl(properties.getAliyun
()); } @Bean public TenCentSmsServiceImpl tenCentSmsService(SmsProperties
properties) { return new TenCentSmsServiceImpl(properties.getTencent()); } }
定义两个短信服务的实现类
public class AliYunSmsServiceImpl implements SmsSenderService { private
SmsProperties.SmsMessage smsMessage; public AliYunSmsServiceImpl(SmsProperties.
SmsMessage properties) { this.smsMessage = properties; } @Override public
boolean sendMessage(String message) { System.out.println(smsMessage.toString() +
"发送短信:" + message); return false; } } public class TenCentSmsServiceImpl
implements SmsSenderService { private SmsProperties.SmsMessage smsMessage;
public TenCentSmsServiceImpl(SmsProperties.SmsMessage properties) { this.
smsMessage= properties; } @Override public boolean sendMessage(String message) {
System.out.println(smsMessage.toString() + "发送短信:" + message); return false; } }
在META-INF/spring.factories文件中配置自动配置类
至此我们自己的starter以及开发完成了。然后就是怎么集成到我们项目中使用了。
三、业务系统集成springboot starter
pom文件中加入sms-spring-boot-starter依赖
<dependency> <groupId>com.example.sms</groupId> <artifactId>sms-spring-boot-
starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
application.yml配置短信
新建测试类并测试是否成功
@RestController @RequestMapping("/demo") public class TestController {
@Autowired private AliYunSmsServiceImpl aliYunSmsService; @Autowired private
TenCentSmsServiceImpl tenCentSmsService; @RequestMapping("/aliyun") public
boolean aliyun() { return aliYunSmsService.sendMessage("阿里云发送的短信"); }
@RequestMapping("/tencent") public boolean tencent() { return tenCentSmsService.
sendMessage("腾讯云发送的短信"); } }
验证成功,到这里我们整个springBoot starter开发完成了