Обязательна ли аннотация @EnableMongoRepositories при создании конечных точек отдыха с использованием данных Spring покоя @RepositoryRestResource - PullRequest
0 голосов
/ 15 мая 2019

Я пробовал руководство по загрузке пружины, чтобы создать конечную точку отдыха данных пружины, используя аннотацию @RepositoryRestResource.Я заметил, что в руководстве они не указали нам использовать какие-либо другие аннотации вместо @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);

}

, и это, кажется, работает, пока я держу все в одной упаковке.Итак, я пытаюсь понять, почему это работает, хотя мы не используем аннотации @EnableMongoRepositories и т. Д., Которые обычно используются для обеспечения реализации по умолчанию для операций CRUD?Из документации видно, что MongoRepository внутренне расширяет интерфейс PagingAndSortingRepository, который, в свою очередь, расширяет интерфейс CrudRepository.Может кто-нибудь объяснить, как это работает?

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

При использовании обычного приложения Spring (не Spring Boot) или при несоблюдении общих рекомендаций для приложения Spring Boot (помещение аннотированного класса @SpringBootApplication в пакет верхнего уровня ), тогда вы должны добавить аннотацию @EnableMongoRepositories.

Если вы используете Spring Boot и выполняете общие рекомендации, вам не нужно добавлять аннотацию. Spring Boot выясняет, обнаружив Mongo и Spring Data MongoDB на пути к классам, который вы, очевидно, хотите использовать. См. MongoRepositoriesAutoConfiguration класс для этого (ПРИМЕЧАНИЕ. Это класс Spring Boot, а не класс Spring Data MongoDB).

1 голос
/ 15 мая 2019

Spring boot полагается на автоконфигурацию.Каждый класс автоконфигурации имеет несколько триггеров, которые включают его (например, какой-то класс существует на пути к классам, некоторый bean-компонент отсутствует) и автоматически настраивает некоторые службы (путем регистрации bean-компонентов и т. Д.)

В вашем случае вы ищетедля MongoRepositoriesAutoConfiguration

Автоконфигурация для репозиториев Spring Data в Mongo.Активируется, когда в контексте не настроен bean-компонент типа MongoRepositoryFactoryBean, тип MongoRepository Spring Data находится в пути к классам, API драйвера клиента Mongo находится в пути к классам, а другие настроенные MongoRepository отсутствуют.

Onceпо сути, автоконфигурация является эквивалентом включения репозиториев Mongo с использованием аннотации EnableMongoRepositories.

...