CDI 統合

リポジトリインターフェースのインスタンスは通常、コンテナーによって作成されます。Spring Data を使用する場合は、Spring が最も自然な選択です。Spring は、Bean インスタンスを作成するための高度な機能を提供します。Spring Data Redis には、CDI 環境でリポジトリの抽象化を使用できるカスタム CDI 拡張機能が付属しています。拡張機能は JAR の一部であるため、拡張機能をアクティブにするには、Spring Data Redis JAR をクラスパスにドロップします。

次に、次の例に示すように、RedisConnectionFactory (Javadoc) および RedisOperations (Javadoc) の CDI プロデューサーを実装してインフラストラクチャを設定できます。

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 (Javadoc) および RedisKeyValueTemplate (Javadoc) インスタンスが必要です。提供された Bean が見つからない場合、これらの Bean は Spring Data CDI 拡張機能によって作成および管理されます。ただし、独自の Bean を指定して、RedisKeyValueAdapter (Javadoc) および RedisKeyValueTemplate (Javadoc) の特定のプロパティを構成することもできます。