开发自己的SpringBoot Starter

开发自己的SpringBoot Starter,第1张

开发自己的SpringBoot Starter

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存