使用 Spring 数据 rest @RepositoryRestResource 创建 rest 端点时是否需要注释 @EnableMongoRepositories

Is the annotation @EnableMongoRepositories required while creating rest endpoints using Spring data rest @RepositoryRestResource

我正在尝试使用 spring 引导指南使用 @RepositoryRestResource 注释创建 spring 数据休息端点。我观察到的是,在指南中,他们没有指定我们使用任何其他注释而不是 @RepositoryRestResource。所以我所做的是:

public class Merchant{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

@RepositoryRestResource(collectionResourceRel = "account", path = "account")
public interface MerchantRepository extends MongoRepository<Merchant, String> {

    List<Person> findByLastName(@Param("name") String name);

}

只要我把所有东西都放在同一个包里,它似乎就可以工作。所以,我试图理解为什么即使我们没有使用通常用于为 CRUD 操作提供默认实现的注释 @EnableMongoRepositories 等,为什么它仍然有效?从文档中可以明显看出 MongoRepository 在内部扩展了 PagingAndSortingRepository 接口,后者又扩展了 CrudRepository 接口。有人可以解释一下这是如何工作的吗?

Spring 引导依赖于 auto-configuration。每个 auto-configuration class 都有一些启用它的触发器(比如一些 class 存在于 class 路径上,一些 bean 丢失)和 auto-configures 一些服务(通过注册 bean 等)

在您的情况下,您正在寻找 MongoRepositoriesAutoConfiguration

Auto-configuration for Spring Data's Mongo Repositories. Activates when there is no bean of type MongoRepositoryFactoryBean configured in the context, the Spring Data Mongo MongoRepository type is on the classpath, the Mongo client driver API is on the classpath, and there is no other configured MongoRepository.

Once in effect, the auto-configuration is the equivalent of enabling Mongo repositories using the EnableMongoRepositories annotation.

当使用常规 Spring(不是 Spring 引导)应用程序或不遵守 general recommendations for a Spring Boot application (putting the @SpringBootApplication annotated class in a top-level package) 时,您必须添加 @EnableMongoRepositories 注释。

如果您使用 Spring 启动并遵循一般建议,则无需添加注释。 Spring Boot 通过在 class 路径上检测 Mongo 和 Spring 数据 MongoDB 来计算你显然想使用它。请参阅 MongoRepositoriesAutoConfiguration class(注意:这是 Spring 引导 class 不是 Spring 数据 MongoDB class) .