CDI 集成
仓库接口的实例通常由容器创建,而在使用 Spring Data 时,Spring 容器是最自然的选择。Spring Data for Apache Cassandra 自带一个定制的 CDI 扩展,让您能够在 CDI 环境中使用仓库抽象。该扩展包含在 JAR 包中。要启用它,只需将 Spring Data for Apache Cassandra JAR 包放入您的 classpath。接下来,您可以通过为 CassandraTemplate 实现一个 CDI 生产者来搭建基础设施,如下例所示:
class CassandraTemplateProducer {
@Produces
@Singleton
public CqlSession createSession() {
return CqlSession.builder().withKeyspace("my-keyspace").build();
}
@Produces
@ApplicationScoped
public CassandraOperations createCassandraOperations(CqlSession session) {
CassandraMappingContext mappingContext = new CassandraMappingContext();
mappingContext.afterPropertiesSet();
MappingCassandraConverter cassandraConverter = new MappingCassandraConverter(mappingContext);
cassandraConverter.setUserTypeResolver(new SimpleUserTypeResolver(session));
cassandraConverter.afterPropertiesSet();
return new CassandraAdminTemplate(session, cassandraConverter);
}
public void close(@Disposes CqlSession session) {
session.close();
}
}
Spring Data for Apache Cassandra CDI 扩展会将 CassandraOperations 拾取为 CDI Bean,并在容器请求仓库类型的 Bean 时为 Spring Data 仓库创建代理。因此,获取 Spring Data 仓库的实例只需声明一个注入的属性,如下例所示:
class RepositoryClient {
@Inject PersonRepository repository;
public void businessMethod() {
List<Person> people = repository.findAll();
}
}