1、出现的背景
在spring boot之前,想要在spring中集成redis,需要做的事情包括:
(1)引入jar包:包括redis的jar包,redis依赖的jar包,相应的版本,与spring版本是否兼容等
(2)在配置文件中配置连接地址、端口号等
(3)以Jedis为例,增加增加JedisConnectionFactory、RedisTemplate 的bean初始化代码
(4)使用RedisTemplate
可以看到,集成过程比较复杂,而这些过程跟业务开发没有任何关系。
是否可以简化这些三方框架的集成步骤呢,于是starter机制应运而生。
2、SpingBoot starter 是什么
SpringBoot starter 是一种简化三方框架集成的技术。
简化了jar包管理、配置、以及bean的初始化过程。
3、SpingBoot starter 实现原理
3.1 jar包管理优化
如下图所示,starter对依赖jar包及版本的管理,本质是使用pom的继承能力,把starter依赖的jar包提前在pom文件中定好,使用的时候只要引用对应的pom文件即可。
3.2 为什么引入pom文件后bean会自动加载?
本质上是通过spring boot自动加载配置实现的。
(1)starter对应的jar包中,配置starter的配置拓展类:
文件:src/main/resources/META-INF/spring.factories
配置:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.my.starter.MyAutoConfiguration
代码示例:
@Configuration@ConditionalOnClass(MyService.class)public class MyAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic MyService myService() {return new MyServiceImpl();}}
(2)在spring boot中引入该starter的jar包
(3)spring boot 识别spring.factories 文件,找到MyAutoConfiguration进行初始化
(4)使用 MyService bean。
(5)ConditionalOnClass 是做个保护,只有当MyService存在时才加载该配置。
4、SpringBoot starter 使用示例
(1)在 pom.xml 文件中添加 spring-boot-starter-data-redis 依赖。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2)在 application.properties 或 application.yml 文件中配置 Redis 连接信息。
spring:redis:host: localhostport: 6379
(3)使用redis:
@Autowired
private RedisTemplate<String, Object> redisTemplate;