手写一个springboot starter组件

    技术2025-10-09  5

    一、starter 组件的原理

    starter的组件就是自动装配,不了解的同学可以看看我的另一篇文章

    springboot是怎么实现自动装配的?

    二、基于redission(连接redis的客户端)手写一个starter

    1.创建一个工程

    我这里取名为redission-spring-boot-starter

    2.导入jar包
    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.1.RELEASE</version> <optional>true</optional> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.9.0</version> </dependency>

    spring-boot-starter:我们需要依赖springboot的jar,<optional>true</optional>:表示包的依赖不向下传递 redisson:我们用redisson 来连接redis

    3.创建配置类RedissionAutoConfiguration
    @ConditionalOnClass(RedisClient.class) @Configuration @EnableConfigurationProperties(value = RedissionProperties.class) public class RedissionAutoConfiguration { @Bean public RedissonClient redissonClient(RedissionProperties redissionProperties) { Config config = new Config(); String prefix = "redis://"; if (redissionProperties.getSsl()) { prefix = "rediss://"; } config.useSingleServer().setAddress(prefix+redissionProperties.getHost()+":"+redissionProperties.getPort()) .setConnectTimeout(redissionProperties.getConnectTimeout()); return Redisson.create(config); } }

    @ConditionalOnClass(RedisClient.class):表示当RedisClient这个类存在时,才会加载这个类到spring ioc 容器 @Configuration:配置类 @EnableConfigurationProperties(value = RedissionProperties.class):导入一个RedissionProperties的文件类,该类会被spring ioc容器管理

    4.创建properties文件类
    @ConfigurationProperties(prefix = "kangping.redission") public class RedissionProperties { /** * ip */ private String host = "localhost"; /** * 端口 */ private Integer port; /** * 超时时间 */ private Integer connectTimeout; /** * 是否加密 */ private Boolean ssl; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } public Integer getConnectTimeout() { return connectTimeout; } public void setConnectTimeout(Integer connectTimeout) { this.connectTimeout = connectTimeout; } public Boolean getSsl() { return ssl; } public void setSsl(Boolean ssl) { this.ssl = ssl; } }

    @ConfigurationProperties:定义配置的前缀

    5.创建properties文件类

    在META-INF目录下创建一个文件spring.factories,内容如下:

    # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.kangping.redission.RedissionAutoConfiguration
    6.导入生成配置提示的jar包
    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.3.1.RELEASE</version> </dependency>

    我们配置的时候就会有提示

    这个时候我们将包安装到maven本地。

    三、测试
    1.我这里创建了一个user-service的工程,导入我们写的starter组件

    2.配置我们写的starter

    我们看到这里有提示:就是上面的2-6导入的jar包的作用,他会在我们写的starter当中生成一个文件 配置好,下面是我的配置地址: kangping.redission.host=localhost kangping.redission.port=6379 kangping.redission.connectTimeout=5000 kangping.redission.ssl=false

    3编写测试类
    @Autowired RedissonClient redissonClient; @GetMapping("/getRedisString") public String getRedisString() { RBucket<String> name = redissonClient.getBucket("name"); if (name.get() == null) { name.set("kangping"); } return name.get(); }

    访问结果:

    结束!!!!

    Processed: 0.011, SQL: 9