Jak dziala interfejs JpaRepository itd. w Springu?

0

Nie rozumiem jak dzialaja interfejsy JpaRepository, CrudRepository czy PagingandSortingRepository w Springu.
Mam aplikacje w spring-boot z zdefiniowana domain z adnotacja @Entity. Do tego dolaczam interfejs:

public interface MyRepository extends JpaRepository<My, Long> {

}

i to juz dziala....!!?? Wystawia REST API - wszystko OK. Ale gdzie sie to dzieje i jak sie to odbywa? Czy SpringFramework tutaj cos dziala?

dependencies {
	compile('org.springframework.boot:spring-boot-starter-data-jpa')
	compile('org.springframework.boot:spring-boot-starter-data-rest')
	compile('org.springframework.boot:spring-boot-starter-thymeleaf')
	compile('org.springframework.boot:spring-boot-starter-web')
/*	compile("org.springframework.boot:spring-boot-devtools") */
	runtime('mysql:mysql-connector-java')
	testCompile('org.springframework.boot:spring-boot-starter-test')
}

Czytam ksiazki = Interfejs to zbior abstrakcyjnych metod bez cial. "Spaceruje" po tych wszystkkich klasach bazowych az do Repository i nic.
Nie rozumiem :-(

3

Polecam zajrzeć do dokumentacji. Spring skanuje w poszukiwaniu interfejsów dziedziczących po springowym *Repository i na podstawie nazw metod (polecam zajrzeć do dokumentacji) dokłada im implementacje i rejestruje jako beany w kontekście springowym. Cała magia odbywa się za pomocą refleksji. A pokazując zależności bootowe - zdecydowana większość jeżeli nie wszystkie paczki spring boota mają domyślną konfigurację z reguły na podstawie tego czy dany bean lub klasa są w classpathie. Prosty przykład - masz zależności do spring data i sterownik do mysqla? To z pewnością chciałbyś to połączyć i Spring tworzy ci jakąś domyślną konfigurację wymagając od ciebie jak najmniej danych.

Mi dla mongo podstawia SimpleMongoRepostory

0

Spring wykrywa ten interfejs i "w locie" generuje implementacje dla tych metod, bo są standardowe do bólu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1