StringRedisTemplate是在何时被交给spring容器管理的?

背景

​ 最近在使用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进行管理。只需要在使用时直接进行依赖注入即可。

本文已在掘金同步上传:StringRedisTemplate是在何时被交给spring容器管理的?

你可能感兴趣的:(StringRedisTemplate是在何时被交给spring容器管理的?)