最近在使用Spring-boot对redis进行整合时,使用到了spring-data提供的StringRedisTemplate模板工具类,
在service实现类中直接使用了@Resource对该模板类进行了依赖注入使用。
之前在使用StringRedisTemplate时都是提供了一个config配置类,其中以@Bean的方式提供一个StringRedisTemplate类使它被spring容器管理:
@Configuration
public class RedisConfig {
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory connectionFactory){
return new StringRedisTemplate(connectionFactory);
}
}
复制代码
但是在一次尝试中,我并没有写该config类,但是在service中StringRedisTemplate模板工具类还是正常被注入了,并没有出现错误。
这不由的让我产生了一个疑问:StringRedisTemplate是在何时被交给Spring进行管理的?
带着问题我开始查看spring-data-redis.jar里面的源码文件,但是没有找到结果.
最终经过查询资料和翻阅后在org.springframework.boot..jar源码的data.redis包下找到了对应的配置文件,源码如下:
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
复制代码
虽然以我的水平并不能完全读懂该源码,但是通过我能读懂的部分可以推断出该配置类中已经以@Bean的方式提供了StringRedisTemplate的实例对象交给了Spring进行管理,所以才可以直接试用@Resource进行注入试用。
我们知道:Spring-Boot的一个核心就是自动配置:针对很多Spring应用程序和常见的应用功能,Spring Boot能自动提供相关配置。
autoconfigure翻译过来就是自动配置。
所以我们可以理解为Springboot为StringRedisTemplate提供了自动配,使得我们无需再手动提供配置类把StringRedisTemplate模板类交给Spring进行管理。只需要在使用时直接进行依赖注入即可。
本文已在CSDN同步上传: StringRedisTemplate是在何时被交给spring容器管理的?