Ton*_*ita 6 java generics spring dry redis
我已经读过你可以@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...
}
Run Code Online (Sandbox Code Playgroud)
我的Java配置为valueTemplate使他能@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.
Run Code Online (Sandbox Code Playgroud)
扩展RedisService<T>该类的每个类看起来像:
@Service
public class MyTypeAService extends RedisService<MyTypeA> {
Run Code Online (Sandbox Code Playgroud)
有没有更干的方法我可以@Bean使用我的Java配置创建这些RedisTemplate ?
Ces*_*cci -1
我遇到过同样的问题。您可以为此创建一个通用 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;
}
Run Code Online (Sandbox Code Playgroud)
缓存类的用法:
@Autowired
@Qualifier("objectRedisTemplate")
private RedisTemplate<String, MyTypeA> redisTemplate;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2274 次 |
| 最近记录: |