最近在使用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容器管理的?