开发自己的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依赖

 <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开发完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值