Java 在Spring 4中干燥通用模板
我已经读到,从Spring4开始,您可以使用Java 在Spring 4中干燥通用模板,java,spring,generics,redis,dry,Java,Spring,Generics,Redis,Dry,我已经读到,从Spring4开始,您可以使用@Autowired泛型,这太棒了 我有一个抽象的RedisService类,我想在其中拥有一个通用的RestTemplate,如下所示: public abstract class RedisService<T> implements InitializingBean { private final String VALUE_KEY_PREFIX; private final String SET_KEY; @Autowired pr
@Autowired
泛型,这太棒了
我有一个抽象的RedisService类,我想在其中拥有一个通用的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...
}
扩展RedisService
类的每个类看起来像:
@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.
@Service
public class MyTypeAService extends RedisService<MyTypeA> {
@服务
公共类MyTypeAsService扩展了RedisService{
有没有一种更简单的方法可以用我的Java配置创建这些RedisTemplate
@Bean
s?我也有同样的问题。你可以为此创建一个通用Bean,并使用GenricJackson2JsonRedisSerializer。问题是,通过使用它,json将与一些额外的数据一起保存,以便以后进行反序列化
另一种方法是使用Jackson2JsonRedisSerializer,但它需要泛型类型的类实例才能工作,我不知道如何获得它
@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;
}
@Bean(“objectRedisTemplate”)
公共RedisTemplate对象RedisTemplate(RedisConnectionFactory RedisConnectionFactory){
RedisTemplate RedisTemplate=新RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
RedisSerializer serializer=新的StringRedisSerializer();
redisTemplate.setKeySerializer(序列化器);
redisTemplate.setHashKeySerializer(序列化程序);
setValueSerializer(新的GenericJackson2JsonRedisSerializer());
返回模板;
}
缓存类上的用法:
@Autowired
@Qualifier("objectRedisTemplate")
private RedisTemplate<String, MyTypeA> redisTemplate;
@Autowired
@限定符(“objectRedisTemplate”)
私有再贴现模板;
这似乎没有提供问题的答案。您可以,或参考页面右侧的相关和链接问题来找到答案。如果您有相关但不同的问题,请包含指向此问题的链接以帮助提供上下文。请参阅:@BahramdunAdil您能详细说明吗?我发布时效果很好你好,托尼,你能解决这个问题吗?如果能,怎么解决?