嗨~大家好,我是阿壮,一个后端程序员,今天和大家分享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有个更深的理解。
我是阿壮,关注微信公众号:科技猫,获取第一时间更新,我么下期间
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。