Как spring инстанцира bean от анотиран интерфейс (напр. JpaRepository)?

В момента използвам Spring за проект и съм объркан как Spring всъщност може да инстанцира анотиран интерфейс като JpaRepository.

Доколкото знам, един интерфейс не може да бъде създаден без имплементация. Също така според моето разбиране всички пояснения в интерфейсите не се наследяват от имплементиращия клас (което трябва да ги направи безполезни?)

И така, как Spring може действително да получи работещ bean само от анотиран интерфейс, както е показано по-долу?

@Repository
public interface ExampleRepository extends PagingAndSortingRepository<ExampleEntity, Long>{

}

person Herr Derb    schedule 04.09.2017    source източник
comment
Spring Data генерира JDK проксита по време на изпълнение.   -  person chrylis -cautiouslyoptimistic-    schedule 04.09.2017
comment
Според тяхната начална страница Като разработчик вие пишете интерфейсите на вашето хранилище, включително персонализирани методи за намиране, а Spring ще осигури внедряването автоматично. вижте начална страница   -  person Scary Wombat    schedule 04.09.2017
comment
@chrylis Не съм много запознат с концепцията за прокси. Както разбирам, spring открива анотацията Component и създава bean по подразбиране, прилагащ дефинирания интерфейс на хранилището?   -  person Herr Derb    schedule 04.09.2017
comment
Както беше споменато от @chrylis, spring генерира JDK проксита по време на изпълнение. Добър начин да видите това е да стартирате приложението си в режим на отстраняване на грешки и да поставите точки на прекъсване на интерфейсните методи. Ще можете да видите генерираните класове.   -  person Gautam    schedule 04.09.2017
comment
@HerrDerb Прочетете някои уроци за JDK прокси функцията. Това е основна част от много рамки, които предоставят магия, включително Spring, JPA доставчици, REST клиенти и др.   -  person chrylis -cautiouslyoptimistic-    schedule 04.09.2017