Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring 4中干燥通用模板_Java_Spring_Generics_Redis_Dry - Fatal编程技术网

Java 在Spring 4中干燥通用模板

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

我已经读到,从Spring4开始,您可以使用
@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您能详细说明吗?我发布时效果很好你好,托尼,你能解决这个问题吗?如果能,怎么解决?