CDI 集成
存储库接口的实例通常由容器创建,在使用 Spring Data 时,Spring 是最自然的选择。 Spring 提供了用于创建 bean 实例的复杂功能。 Spring Data Redis 附带了一个自定义 CDI 扩展,允许您在 CDI 环境中使用存储库抽象。 该扩展是 JAR 的一部分,因此,要激活它,请将 Spring Data Redis JAR 拖放到您的类路径中。
然后,您可以通过为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 存储库需要RedisKeyValueAdapter和RedisKeyValueTemplate实例。
如果未找到提供的 bean,则这些 bean 由 Spring Data CDI 扩展创建和管理。
但是,您可以提供自己的 bean 来配置RedisKeyValueAdapter和RedisKeyValueTemplate.