CDI 集成
存储库接口的实例通常由容器创建,而 Spring 容器是使用 Spring Data 时最自然的选择。
Spring Data for Apache Cassandra 附带了一个自定义 CDI 扩展,允许在 CDI 环境中使用存储库抽象。
该扩展是激活它的 JAR.To 的一部分,将 Spring Data for Apache Cassandra JAR 拖放到您的类路径中。
现在,您可以通过为CassandraTemplate
,如下所示:
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();
}
}