手寫一個Spring Boot Starter

嗨~你們好,我是阿壯,一個後端程序員,今天和你們分享Spring Boot的自動裝配原理,並手寫一個Starter加深對Spring Boot的理解。java

衆所周知,Spring Boot爲了簡化開發,省去了Spring中不少的XML文件。爲了理解Spring Boot中自動裝配的原理,今天咱們基於這個機制本身動手實現一個Starter組件。程序員

項目結構

步驟

  1. 新建一個名爲:redis-spring-boot-starter的Maven項目
  2. 添加Maven依賴redis

    <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的鏈接參數。spring

    @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. 在其餘項目引入當先依賴app

    <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有個更深的理解。spring-boot

我是阿壯,關注微信公衆號:科技貓,獲取第一時間更新,我麼下期間this

相關文章
相關標籤/搜索