我正在尝试使用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
接口。有人可以解释一下它是如何工作的吗?
答案 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存储库。