SpringBoot系列之自定义Starter组件

2022-06-19 08:15:23

对于自动装配的原理进行分析之后,我们可以基于这个机制来实现一个 Starter组件,如果还有童鞋对自动装配不太了解的,可以回头看一下我的上一篇博文

https://blog.csdn.net/qq_38377525/article/details/122920370https://blog.csdn.net/qq_38377525/article/details/122920370Spring Boot官方提供的 Starter并不能囊括所有的技术组件,在平时的工作中,如果自己的项目需要支持 Spring Boot,也需要开发 Starter组件。从 Spring Boot官方提供的 Starter的作用来看, Starter组件主要有三个功能:涉及相关组件的Jar包依赖、自动实现Bean的装配、自动声明并且加载application.properties文件中的属性配置

1、Starter的命名规范

Starter的命名主要分为两类,一类是官方命名,另一类是自定义组件命名。这种命名格式并不是强制性的是一种约定俗成的方式,可以让开发者更容易识别。

官方命名的格式为:spring-boot- starter-模块名称,比如常见的spring- boot-starter-data-redis、spring- boot-starter-web。

自定义命名格式为:模块名称- spring-boot-starter,比如mybatis-spring-boot- starter

简单来说,官方命名中模块名放在最后,而自定义组件中模块名放在最前面

 2、举例编写自定义Starter组件

例子:基于Redis的Starter

虽然 Spring Boot官方提供了 spring-boot-starter-data-redis组件来实现 RedisTemplate的自动装配,但是我们用这个案例来让大家更好的去领会,因为自动装配大家都清楚了,Redis大家想必也不陌生,综合来说方便理解

实现步骤:

1、创建一个工程:redis-spring-boot-starter

2、添加redis依赖,使用Redisson来封装Starter,依赖如下

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.11.1/version>
</dependency>

3、定义属性类RedissonProperties,封装redis必需属性

@ConfigurationProperties(prefix ="starter.redisson")
public class RedissonProperties{
    private String host= "localhost";
    private String password;
    private int port = 6379;
    private int timeout;
    private boolean ssl;
    public String getHost(){return host;}
    public void setHost(String host){this.host=host;}
    public String getPassword(){return password;}
    public void setPassword(String password){this.password=password;}
    public int getPort(){return port;}
    public void setport(int port){this.port=port;}
    public boolean isSsl(){return ssl;}
    public void setssl(boolean ssl){this.ssl=ssl;}
    public int getTimeout(){return timeout;}
    public void setTimeout(int timeout){this.timeout=timeout;};
}

4、定义需要自动装配的配置类RedissonAutoConfiguration

@Configuration
@ConditionalOnClass(Redisson.class)
@EnableConfigurationProperties(RedissonProperties.class)
public class RedissonAutoConfiguration {
    @Bean
    RedissonClient redissonClient(RedissonProperties redissonProperties) {
        Config config = new Config();
        String prefix = "redis://";
        if(redissonProperties.isSsl()) {
            prefix = "rediss://";
        }
        SingleServerConfig singleServerConfig = config.useSingleServer()
                .setAddress(prefix + redissonProperties.getHost() + ":" +redissonProperties.getPort())
                        .setConnectTimeout(redissonProperties.getTimeout());
        if(!StringUtils.isEmpty(redissonProperties.getPassword())){
            singleServerConfig.setPassword(redissonProperties.getPassword());
        }
        return Redisson.create(config);
    }
}

5、在META-INF创建spring.factories文件,让SpringBoot可以扫描到该文件,自行完成自动装配,对应的key/value如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.cb.redisspringbootstarter.config.RedissonAutoConfiguration

6、然后打jar包,在需要这个starter服务中,添加依赖,并且添加配置属性

<dependency>
    <groupId>com.cb</groupId>
    <artifactId>redis-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
#根据RedissonProperties配置类的前缀来定义
starter.redisson.host=127.0.0.1
starter.redisson.port=6379

到这里,自定义Starter组件就完成了,其中还有一些操作,比如什么时候jar包用起来,可以使用@Conditional机制来做,这里就不做追叙了,如果后面有空,再补充


demo样例链接:

https://gitee.com/IT_CB/redis-spring-boot-starterhttps://gitee.com/IT_CB/redis-spring-boot-starter

  • 作者:阿小冰
  • 原文链接:https://blog.csdn.net/qq_38377525/article/details/122926206
    更新时间:2022-06-19 08:15:23