Spring Boot und seine Module verstehen

Stefan309

Mitglied
Hallo liebes Java forum,

ich habe mit Spring Boot bereits erste Erfahrungen gesammelt und sowas wie eine REST basierte API entwickelt. Den Umgang mit Spring Boot finde ich jetzt nicht besonders schwer aber ich verstehe so viele Sachen einfach nicht. Ich habe mir sämtliche Tutorials und auch Bücher zu Spring besorgt und zum Teil durchgelesen was mir bisschen weiterhelfen konnte. Trotzdem gibt es da noch sehr viele Sachen die ich anwenden kann aber ich verstehe nicht warum das überhaupt funktioniert.

Zum Beispiel das Modul Spring Data JPA. Um auf eine Datenbank zugreifen zu können muss man mit dem Modul lediglich eine Entity Klasse und eine Repository Interface erstellen, in der dann die Entität (Domain Klasse) und den Datentyp der ID angegeben wird. Dann kann man durch vordefinierte Methoden auf die Datenbank zugreifen. Schön und gut aber ich raffe einfach nicht wieso man so ein Interface erstellen kann und plötzlich zugriff auf Methoden einer Klasse hat. Wie kann das sein dass man durch ein Interface auf Methoden einer Klasse zugreifen kann? Ich dachte Interfaces geben lediglich vor welche Methoden man implementieren muss. Ja und sonst wie das mit Hibernate und JPA im Hintergrund passiert verstehe ich auch noch nicht so. Die Reference Documentation habe ich mir paar mal angeschaut aber das ist ja eher ein Benutzerhandbuch wie man mit dem Modul umgeht. Ist Spring Data JPA gleichzusetzen mit JPA nur irgendwie speziell für Spring Boot Applikationen angepasst oder ist dessen Implementierung völlig anders?

Also meine Fragen lauten daher: Wie mache ich mich am besten in Spring Boot schlau. Wie komme ich an die Theorie die hinter dem ganzen steckt ran? Welche Ressourcen und Literatur könnt ihr mir empfehlen? Könnt ihr mir sonst Artikel empfehlen die sich mit der Theorie beschäftigen (bitte keine Tutorials).

Bisher war mein Ansatz learning by doing aber ich habe das Gefühl ich habe nur gelernt wie man Aufgaben löst ohne zu verstehen was da wirklich vor sich geht.
 

M.L.

Top Contributor
Wie es aussieht geht das Spring Framework standardmässig davon aus das die Zielsoftware erweitert werden wird: andere UI, weitere DB-Systeme sollen angesprochen werden, Controller-Methoden sollen (nicht mehr) genutzt werden,... (s.a. https://www.java-forum.org/thema/wi...vernuenftige-klassen-ein.185926/#post-1197005 ) Ob die Erweiterung / Änderung im Einzelfall auch eintritt steht auf einem anderen Blatt. Den Sinn gegen Schnittstellen zu implementieren (s. Openbook - OOP ) erkennt man, wenn eine Änderung / Erweiterung nur an einer (zentralen) Stelle vorgenommen werden muss. Und Frameworks wie z.B. JPA / Hibernate / ... fassen im Hintergrund nur eine (Teil-)Menge an Aktionen / Möglichkeiten mit JDBC zusammen.
 

mihe7

Top Contributor
Schön und gut aber ich raffe einfach nicht wieso man so ein Interface erstellen kann und plötzlich zugriff auf Methoden einer Klasse hat. Wie kann das sein dass man durch ein Interface auf Methoden einer Klasse zugreifen kann? Ich dachte Interfaces geben lediglich vor welche Methoden man implementieren muss.
Da ist etwas Magie im Spiel: Spring erzeugt eine Proxy-Instanz, die das Interface implementiert.
 

LimDul

Top Contributor
Java:
public class MyClass {
private MyRepo myRepo = new MyRepo();
}
Das ist so der code, denn man als "Anfänger" irgendwann schreibt. Der ist nicht falsch, aber er sorgt dafür dass MyClass eine enge Kopplung zu MyRepo hat. Wenn man mal die Implementierung von MyRepo austauschen will, muss man an der Stelle den Typ ändern (sowohl bei der Zuweisung als auch bei der Deklarartion). Und wenn man myRepo in Methoden als Parameter reingibt muss man da auch den Typ ändern.

Schritt 1:

Java:
public interface MyRepoInterface {}

public class MyRepo implements MyRepoInterface {}

public class MyClass {
private MyRepoInterface myRepo = new MyRepo();
}

Man verwendet nur noch das Interface als Definition und muss so nur die Stelle anpassen, wenn man eine andere Implementierung des Interfaces verwenden will. Dennoch hat man zur Compile-Zeit eine harte Abhängigkeit zu MyRepo. Oft will man einfach sagen "Ich möchte eine Implementierung von MyRepoInterface verwenden, aber welche - da möchte ich mich erst zur Laufzeit festlegen". Da kommt die Dependency Injection ins Spiel. Die geht mittlerweile in der Regel über Annotationen, bei Spring Boot ist es @Autowired

Schritt 2 - Dependency Injection
Java:
public interface MyRepoInterface {}

@Component
public class MyRepo implements MyRepoInterface {}

public class MyClass {
@Autowired
private MyRepoInterface myRepo;
}

Jetzt muss man die Mechanismen noch auslösen, aber wenn der Code läuft passiert folgendes:
* Im Class Path werden alle Implementierungen von MyRepInterface gesucht, die mit einer Annotation markiert sind, dass sie an der Stelle verwendbar (die generischste ist bei Spring Boot @Component). Spring Boot findet dann in der Konstellation genau eine Implementierung - MyRepo, erzeugt diese und weist die der Variablen myRepo zu.

Nun treibt Spring Boot das ganze noch weiter und sagt:
Für bestimmte Interfaces - die Repositories sind da das beste Beispiel - muss im Class Path gar keine Implementierung liegen. Wie die Methoden zu implementieren sind, ist ja klar. Die Komponente mit der DB-Abstrationsschicht (z.B. JPA) analysiert das Interface erzeugt dann dynamisch eine Implementierung die dann der Variablen vom Typ des Repositories zugewiesen wird.

Du kannst mal Spaßeshalber eine Methode ergänzen, mit der JPA nicht umgehen kann - z.B. findByNonExistingAttribut und dann im StackTrace der Exception schauen was Spring Boot da treibt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Security/Boot/Vaadin Cookie Problem bei iFrame Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot: Feld ignorieren Frameworks - Spring, Play, Blade, Vaadin & Co 3
N Buch zum Spring Framework bzw. Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Jasypt Spring Boot HIbernate wie komme ich an den Key? Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Spring Boot im Docker Container - Logback wird nicht verwendet Frameworks - Spring, Play, Blade, Vaadin & Co 13
sascha-sphw Spring Boot Resource Server (OAuth2) @MockMvc Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot CDN Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Deserialiserung mit JSON Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot POST zu PHP API Frameworks - Spring, Play, Blade, Vaadin & Co 12
OnDemand Spring Boot WebClient ErrorHandling Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring boot : Unique Constraint mit Many to Many Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Repository null Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Limits API calls Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring boot mit Keyclaok rollen basiert Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Scheduler flexibel machen Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot + Vaadin API Security Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Architektur für Spring Boot Projekt Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Boot, Versionskontrolle und Entwicklungsumgebung und Deployment Frameworks - Spring, Play, Blade, Vaadin & Co 2
Avalon Image aus JSON Objekt im Browser anzeigen (BLOB, extrahieren, konvertieren) Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon CSS Datei wird in Spring Boot mit Thymeleaf im Standardordner nicht gefunden Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Mapping null bei GET Aufruf Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot Test mit Junit Frameworks - Spring, Play, Blade, Vaadin & Co 8
J Spring Boot - Reactor Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Boot, H2 und Restschnittstelle synchonisation mit Client Frameworks - Spring, Play, Blade, Vaadin & Co 10
TonioTec Spring Boot Datenbankabfrage Frameworks - Spring, Play, Blade, Vaadin & Co 7
OnDemand Spring Boot encoding Slash in URL Parameter Frameworks - Spring, Play, Blade, Vaadin & Co 7
S Spring Boot startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot -> War File | 404 in Tomcat Frameworks - Spring, Play, Blade, Vaadin & Co 20
LimDul Spring Boot Anwendung "automatisch" neustarten Frameworks - Spring, Play, Blade, Vaadin & Co 3
A Spring boot Frameworks - Spring, Play, Blade, Vaadin & Co 18
bueseb84 Unit Test mit Spring Boot - Service Autowired Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand DTO <> Entity Hibernate Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 28
OnDemand Verständnisfrage DTO Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 19
OnDemand Spring Boot Load Balancing Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Threads Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot: Wert aus Config Datei ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot: Ein geschütztes Verzeichnis Frameworks - Spring, Play, Blade, Vaadin & Co 1
bueseb84 Probleme mit Spring Boot Docker und Bootstrap Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot Eureka/Zuul Frameworks - Spring, Play, Blade, Vaadin & Co 0
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
B Erstes Spring Boot Projekt: Gameserver-Manager Frameworks - Spring, Play, Blade, Vaadin & Co 5
V Spring Boot, thymeleaf, Eingaben cashen oder per session speichern? Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot Security Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot i18n Frameworks - Spring, Play, Blade, Vaadin & Co 28
bueseb84 Spring Boot : Update H2 Repository Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring Boot/ OneToMany Relation Frameworks - Spring, Play, Blade, Vaadin & Co 29
S Spring Boot testen mit Service Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot H2 Datbase Frameworks - Spring, Play, Blade, Vaadin & Co 2
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
L JavaFX Anwendung mit Spring Boot und mehrere FXML Forms Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Mit Maven (und Spring-boot) ein FatJAR und ein EAR bauen Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Basic Authentication langsam Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
H Spring Boot - Dependency Injection Frameworks - Spring, Play, Blade, Vaadin & Co 26
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot parallele Requests Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Resttemplate exchange XML Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Error Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot Transactions Frameworks - Spring, Play, Blade, Vaadin & Co 10

Ähnliche Java Themen

Neue Themen


Oben