嗨~ 大家好,我是阿壮,一个后端程序员,明天和大家分享 Spring Boot 的主动拆卸原理,并手写一个 Starter 加深对 Spring Boot 的了解。
家喻户晓,Spring Boot 为了简化开发,省去了 Spring 中很多的 XML 文件。为了了解 Spring Boot 中主动拆卸的原理,明天咱们基于这个机制本人入手实现一个 Starter 组件。
我的项目构造
步骤
- 新建一个名为:
redis-spring-boot-starter
的 Maven 我的项目 -
增加 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>
-
定义属性,实现在 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;} }
-
定义须要主动拆卸的配置类
@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); } }
-
在
resource
文件夹下新建META-INF/spring.fatories
文件,使 Spring Boot 程序能够扫描文件实现主动拆卸org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jonssonyan.config.RedissonAutoConfiguration
- 打包成 jar 包
-
在其余我的项目引入当先依赖
<dependency> <groupId>com.jonssonyan</groupId> <artifactId>redis-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
- 在
properties
中配置 host 等RedisProperties
中定义的属性
总结
通过一个简略的例子,让咱们加深了解 Spring Boot 的主动拆卸原理,让咱们对 Spring Boot 有个更深的了解。
我是阿壮,关注微信公众号:科技猫,获取第一工夫更新,我么下期间