我读到你可以拥有 @Autowired
Spring 4 的泛型,这很棒。
我有一个摘要RedisService
我想上的课@Autowired
一个通用的 RestTemplate,像这样:
public abstract class RedisService<T> implements InitializingBean {
private final String VALUE_KEY_PREFIX;
private final String SET_KEY;
@Autowired
private RedisTemplate<String, T> valueTemplate;
@Autowired
private StringRedisTemplate stringTemplate;
private SetOperations<String, String> setOperations;
private ValueOperations<String, T> valueOperations;
// and so on...
}
我的 valueTemplate
的 Java 配置是@Autowired
然后看起来像:
@Bean
public RedisTemplate<String, MyTypeA> myTypeARedisTemplate() {
RedisTemplate<String, MyTypeA> template = new RedisTemplate<>();
template.setKeySerializer(stringRedisSerializer());
template.setHashKeySerializer(stringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(MyTypeA.class));
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
@Bean
public RedisTemplate<String, MyTypeB> myTypeBRedisTemplate() {
RedisTemplate<String, MyTypeB> template = new RedisTemplate<>();
template.setKeySerializer(stringRedisSerializer());
template.setHashKeySerializer(stringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(MyTypeB.class));
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
// ... for N MyType classes.
扩展 RedisService<T>
的每个类类看起来像:
@Service
public class MyTypeAService extends RedisService<MyTypeA> {
有没有更干的方法可以创建这些 RedisTemplate @Bean
与我的 Java 配置有关吗?
最佳答案
我遇到了同样的问题。您可以为此创建一个通用 bean,并使用 GenricJackson2JsonRedisSerializer。问题是,通过使用它,json 将与一些额外的数据一起保存,以便稍后进行反序列化。
另一种方法是使用 Jackson2JsonRedisSerializer,但它需要通用类型的 Class 实例才能工作,我不知道如何获取。
@Bean("objectRedisTemplate")
public <T> RedisTemplate<String, T> objectRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, T> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
RedisSerializer<String> serializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(serializer);
redisTemplate.setHashKeySerializer(serializer);
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
在缓存类上的用法:
@Autowired
@Qualifier("objectRedisTemplate")
private RedisTemplate<String, MyTypeA> redisTemplate;
关于java - 在 Spring 4 中干燥一个通用的 RedisTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208010/