Так я после урока здесь: https://spring.io/guides/gs/accessing-data-jpa/Spring CommandLineRunner интерфейс Реализация
и она отлично работает, я пытаюсь реализовать его в моем приложении (Потому что это делает JPA так легко использовать), но я смущенный.
Где она имеет
@Bean
public CommandLineRunner demo(CustomerRepository repository)
, а затем она действует на хранилище
repository.save(new Customer("Jack", "Bauer"));
repository.save(new Customer("Chloe", "O'Brian"));
Как он может действовать на интерфейсе? CustomerRepository представляет собой интерфейс, и я не могу создать его экземпляр
CustomerRepository c = new CustomerRepository()
не может сделать, и у меня нет каких-либо классов, которые реализуют интерфейс. Я просто хотел сделать что-то вроде
CustomerRepository c = new CustomerRepository()
c.save(new Customer("whatever", "whatever")
но я могу использовать его только в бин-компоненте CommandLineRunner. Почему я могу сделать это с помощью commandlinerunner, но не могу сделать это с другим классом?
Я думал, что могу просто создать класс, который расширяет CustomerRepository, но затем я прочитал, что интерфейс фактически выполняет всю реализацию метода (JPA делает это), поэтому вам не нужно беспокоиться об этом.
public interface CustomerRepository extends CrudRepository<Customer, Long> {
List<Customer> findByLastName(String lastName);
}
так, если я продлил его, не я должен переопределить метод findbylastname(), то есть JPA не будет делать это сам?
Спасибо за любую помощь.
FWIW Ни один из них не является JPA API. Это Spring Data JPA! JPA API не имеет XXXRepository. –