CDI 集成

仓库接口的实例通常由容器创建,而 Spring 是使用 Spring Data 时最自然的选择。 从 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();
  }
}