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

时间:2019-05-15 10:09:16

标签: java spring spring-boot spring-data-mongodb spring-data-rest

我正在尝试使用Spring Boot指南使用@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接口。有人可以解释一下它是如何工作的吗?

2 个答案:

答案 0 :(得分:2)

在使用常规的Spring(非Spring Boot)应用程序时,或者不遵守general recommendations for a Spring Boot application(将带有@SpringBootApplication的带注释的类放在top-level package中)时,必须添加{{ 1}}注释。

如果您正在使用Spring Boot并遵循一般建议,则无需添加注释。 Spring Boot通过在您显然想使用它的类路径上检测Mongo和Spring Data MongoDB来弄清楚。参见MongoRepositoriesAutoConfiguration类(注意:这是Spring Boot类,而不是Spring Data MongoDB类)。

答案 1 :(得分:1)

Spring引导依赖于自动配置。每个自动配置类都有一些启用它的触发器(例如某个类存在于类路径中,缺少一些Bean)并自动配置一些服务(通过注册Bean等)

您要寻找的是MongoRepositoriesAutoConfiguration

  

Spring Data的Mongo存储库的自动配置。   当在上下文中没有配置MongoRepositoryFactoryBean类型的bean,Spring Data Mongo MongoRepository类型在类路径上,Mongo客户端驱动程序API在类路径上并且没有其他配置的MongoRepository时激活。

     

生效后,自动配置等效于使用EnableMongoRepositories批注启用Mongo存储库。