Springboot 调用 Reids 模板对象 RedisTemplate 时遇到了无法自动注入自定义泛型的问题。仅可以
RedisTemplate<Object, Object>
与RedisTemplate<String, String>
这两种方式自动注入。
1、查看 Springboot 默认配置
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
复制代码
可以看到 springboot 默认情况下为我们定义了 RedisTemplate<Object, Object>
,StringRedisTemplate
两个类型的 bean,
如果不定义自己的 RedisTemplate,@Autowired 只能这样注入,不能使用其他的泛型注入。
-
因为 @Autowired 是按类型注入
-
解决办法: 可以用 @Resource 注入,并且自定义的对象需要实现 Serializable 接口,因为 Spring 会将对象先序列化再存入 Redis。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END