关于redisTemplate注入的泛型类型不匹配报错
在SpringBoot中注入redisTemplate,
private RedisTemplate<String, Object> redisTemplate;
启动报错:

这是因为 Spring 的依赖注入机制和泛型类型擦除的问题:
- Java 的泛型在运行时会被擦除
- RedisTemplate<String, Object> 在运行时实际上就是 RedisTemplate
- Spring 在注入时需要知道具体的泛型类型
 
- 默认的 RedisTemplate:
- Spring Boot 自动配置会创建一个默认的 RedisTemplate<Object, Object>
- 这个默认的 RedisTemplate 的泛型类型是 <Object, Object>
- 而当前注入需要的是 RedisTemplate<String, Object>
- 类型不匹配
1 1 // RateLimitAspect 中需要的类型 2 2 private final RedisTemplate<String, Object> redisTemplate; 3 3 4 4 // Spring Boot 默认提供的类型 5 5 RedisTemplate<Object, Object>
处理方法:
通过 @Bean 方法显式创建一个 RedisTemplate<String, Object>,这样 Spring 就能找到完全匹配的类型,也可以同时自定义序列化器等配置
1 1 @Configuration 2 2 public class RedisConfig { 3 3 4 4 @Bean 5 5 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { 6 6 RedisTemplate<String, Object> template = new RedisTemplate<>(); 7 7 template.setConnectionFactory(connectionFactory); 8 8 9 9 template.setKeySerializer(new StringRedisSerializer()); 10 10 template.setHashKeySerializer(new StringRedisSerializer()); 11 11 12 12 GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); 13 13 template.setValueSerializer(jsonRedisSerializer); 14 14 template.setHashValueSerializer(jsonRedisSerializer); 15 15 16 16 template.afterPropertiesSet(); 17 17 return template; 18 18 }

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号