存储库接口的实例通常由容器创建,在使用 Spring Data 时,Spring 是最自然的选择。 Spring 为创建 Bean 实例提供了复杂的功能。 Spring Data Redis 附带了一个自定义 CDI 扩展,允许您在 CDI 环境中使用存储库抽象。 该扩展是 JAR 的一部分,因此,要激活它,请将 Spring Data Redis JAR 拖放到您的类路径中。
然后,您可以通过为 和 实现 CDI 生产者来设置基础架构,如以下示例所示:RedisConnectionFactory
RedisOperations
class RedisOperationsProducer {
@Produces
RedisConnectionFactory redisConnectionFactory() {
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisStandaloneConfiguration());
connectionFactory.afterPropertiesSet();
connectionFactory.start();
return connectionFactory;
}
void disposeRedisConnectionFactory(@Disposes RedisConnectionFactory redisConnectionFactory) throws Exception {
if (redisConnectionFactory instanceof DisposableBean) {
((DisposableBean) redisConnectionFactory).destroy();
}
}
@Produces
@ApplicationScoped
RedisOperations<byte[], byte[]> redisOperationsProducer(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
template.setConnectionFactory(redisConnectionFactory);
template.afterPropertiesSet();
return template;
}
}
必要的设置可能会有所不同,具体取决于您的 JavaEE 环境。
Spring Data Redis CDI 扩展将所有可用的存储库选取为 CDI bean,并在容器请求存储库类型的 Bean 时为 Spring Data 存储库创建代理。
因此,获取 Spring Data 存储库的实例只需声明一个属性,如以下示例所示:@Injected
class RepositoryClient {
@Inject
PersonRepository repository;
public void businessMethod() {
List<Person> people = repository.findAll();
}
}
Redis 存储库需要 和 实例。
如果未找到提供的 Bean,则由 Spring Data CDI 扩展创建和管理这些 Bean。
但是,您可以提供自己的 Bean 来配置 和 的特定属性。RedisKeyValueAdapter
RedisKeyValueTemplate
RedisKeyValueAdapter
RedisKeyValueTemplate