CDI 集成

仓库接口的实例通常由容器创建,在使用 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();
  }
}