关于spring:手写一个Spring-Boot-Starter

77次阅读

共计 2689 个字符,预计需要花费 7 分钟才能阅读完成。

嗨~ 大家好,我是阿壮,一个后端程序员,明天和大家分享 Spring Boot 的主动拆卸原理,并手写一个 Starter 加深对 Spring Boot 的了解。

家喻户晓,Spring Boot 为了简化开发,省去了 Spring 中很多的 XML 文件。为了了解 Spring Boot 中主动拆卸的原理,明天咱们基于这个机制本人入手实现一个 Starter 组件。

我的项目构造

步骤

  1. 新建一个名为:redis-spring-boot-starter的 Maven 我的项目
  2. 增加 Maven 依赖

    <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter</artifactId>
         </dependency>
         <dependency>
             <groupId>org.redisson</groupId>
             <artifactId>redisson</artifactId>
             <version>3.11.1</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-configuration-processor</artifactId>
             <optional>true</optional>
         </dependency>
     </dependencies>
     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
                 <version>2.3.2.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>
  3. 定义属性,实现在 applications.properties 中的 Redis 的连贯参数。

    @ConfigurationProperties(prefix = "gp.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 int getTimeout() {return timeout;}
    
     public void setTimeout(int timeout) {this.timeout = timeout;}
    
     public boolean isSsl() {return ssl;}
    
     public void setSsl(boolean ssl) {this.ssl = ssl;}
    }
  4. 定义须要主动拆卸的配置类

    @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.hasText(redissonProperties.getPassword())) {singleServerConfig.setPassword(redissonProperties.getPassword());
         }
         return Redisson.create(config);
     }
    }
  5. resource 文件夹下新建 META-INF/spring.fatories 文件,使 Spring Boot 程序能够扫描文件实现主动拆卸

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jonssonyan.config.RedissonAutoConfiguration
  6. 打包成 jar 包
  7. 在其余我的项目引入当先依赖

         <dependency>
             <groupId>com.jonssonyan</groupId>
             <artifactId>redis-spring-boot-starter</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
  8. properties 中配置 host 等 RedisProperties 中定义的属性

总结

通过一个简略的例子,让咱们加深了解 Spring Boot 的主动拆卸原理,让咱们对 Spring Boot 有个更深的了解。

我是阿壮,关注微信公众号:科技猫,获取第一工夫更新,我么下期间

正文完
 0