一、什么是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依赖
com.example.sms sms-spring-boot-starter0.0.1-SNAPSHOT
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开发完成了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)