CDI 集成
存储库接口的实例通常由容器创建,而在使用 Spring Data 时,Spring 是最自然的选择。从 1.3.0 版本开始,Spring Data MongoDB 附带了一个自定义的 CDI 扩展,允许你在 CDI 环境中使用存储库抽象。该扩展是 JAR 文件的一部分。要激活它,只需将 Spring Data MongoDB JAR 放入你的类路径中。现在,你可以通过为 MongoTemplate
实现一个 CDI Producer 来设置基础设施,如下例所示:
class MongoTemplateProducer {
@Produces
@ApplicationScoped
public MongoOperations createMongoTemplate() {
MongoDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(MongoClients.create(), "database");
return new MongoTemplate(factory);
}
}
Spring Data MongoDB CDI 扩展会获取作为 CDI bean 可用的 MongoTemplate
,并在容器请求存储库类型的 bean 时,为 Spring Data 存储库创建代理。因此,获取 Spring Data 存储库的实例只需声明一个带有 @Inject
注解的属性,如下例所示:
class RepositoryClient {
@Inject
PersonRepository repository;
public void businessMethod() {
List<Person> people = repository.findAll();
}
}