嗨~大家好,我是阿壮,一个后端程序员,明天和大家分享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有个更深的了解。

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