一、什么是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开发完成了