CDI Integration

存储库接口的实例通常是由容器创建的,而使用 Spring Data 时,Spring 是最自然的选择。从 1.3.0 版开始,Spring Data MongoDB 附带一个自定义 CDI 扩展,让您可以在 CDI 环境中使用存储库抽象。此扩展是 JAR 的一部分。要激活它,请将 Spring Data MongoDB JAR 导入类路径。您现在可以通过为 MongoTemplate 实现一个 CDI 生成器来设置基础设施,如下例所示:

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();
  }
}