E-Book, Deutsch, 1024 Seiten
Ullenboom Spring Boot 4 und Spring Framework 7
3. Auflage 2026
ISBN: 978-3-367-11737-6
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das umfassende Handbuch
E-Book, Deutsch, 1024 Seiten
ISBN: 978-3-367-11737-6
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Willkommen in der Welt von Spring und Spring Boot! Dieses umfassende Handbuch von Bestsellerautor Christian Ullenboom zeigt Ihnen von Managed Beans bis hin zu Spring AI, was Sie über das Framework wissen sollten. Zum Lernen im Hands-On-Modus ebenso wie zum Vertiefen und Nachschlagen. Es bietet ein durchgehendes Anwendungsbeispiel, das sich schon in vielen Schulungen bewährt hat, enthält viele Tipps aus jahrelanger Praxis und klärt über mögliche Stolperfallen auf. Unabhängig davon, mit welcher Architektur Sie entwickeln und wie groß Ihre Projekte sind: Mit dem richtigen Know-how im Rücken sind Sie bereit für professionelle und moderne Softwareentwicklung mit Spring und Java.
Aus dem Inhalt:
- Das erste Projekt aufsetzen
- Spring Core Container
- Dependency Injection und Inversion of Control
- Testgetriebene Entwicklung mit Spring Boot
- Caching
- Jakarta Persistence Query Language
- Spring Data
- RESTful Webservices
- OpenAPI-Dokumentation
- Spring AI
- Spring Security
- Monitoring
- Logging
- Deployment
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 23
1. Einleitung und erstes Beispiel ... 33
1.1 ... Geschichte von Spring Framework und Spring Boot ... 33
1.2 ... Dependencies und Starter eines Spring-Boot-Projekts ... 53
1.3 ... Einstieg in die Konfigurationen und das Logging ... 62
2. Container für Spring-managed Beans ... 67
2.1 ... Spring-Container ... 67
2.2 ... Design und Strukturierung einer Anwendung ... 75
2.3 ... Spring-managed Beans durch Classpath-Scanning aufnehmen ... 81
2.4 ... Interaktive Anwendungen mit der Spring Shell ... 91
2.5 ... Die Verweisspritze ... 96
2.6 ... Konfigurationsklassen und Fabrikmethoden ... 114
2.7 ... Abstraktion und Qualifizierungen ... 132
2.8 ... Lebenszyklus der Beans ... 149
2.9 ... Annotationen aus »Jakarta Dependency Injection« * ... 170
2.10 ... Autokonfiguration ... 172
2.11 ... Spring Expression Language (SpEL) ... 186
3. Ausgewählte Module des Spring Frameworks ... 193
3.1 ... Hilfsklassen im Spring Framework ... 193
3.2 ... Externe Konfiguration und das Environment ... 194
3.3 ... Am Anfang und Ende ... 241
3.4 ... Ereignisbehandlung ... 251
3.5 ... Ressourcenabstraktion mit Resource ... 266
3.6 ... Typkonvertierung mit ConversionService ... 271
3.7 ... Internationalisierung * ... 289
3.8 ... Scheduling * ... 295
3.9 ... Typen aus org.springframework.*.[lang|util] ... 300
3.10 ... JSpecify-Null-Annotationen in Spring ... 306
4. Testgetriebene Entwicklung mit Spring Boot ... 309
4.1 ... Grundlagen der testgetriebenen Entwicklung ... 309
4.2 ... Testen mit Mock-Objekten ... 319
4.3 ... Testen mit Spring-Unterstützung ... 328
5. Ausgewählte Proxies ... 341
5.1 ... Proxy-Pattern ... 342
5.2 ... Caching ... 346
5.3 ... Asynchrone Aufrufe ... 366
5.4 ... TaskExecutor * ... 374
5.5 ... Spring und Bean Validation ... 380
6. Relationale Datenbanken anbinden ... 393
6.1 ... Eine H2-Datenbank aufsetzen ... 393
6.2 ... Datenbankzugriffe mit Spring realisieren ... 402
6.3 ... Der Spring Boot Starter JDBC ... 404
6.4 ... JdbcTemplate ... 417
6.5 ... Datentypen zum Mapping auf Ergebnisse ... 423
6.6 ... NamedParameterJdbcTemplate ... 434
6.7 ... Batch-Operationen * ... 440
6.8 ... Es wird groß mit BLOB und CLOB * ... 449
6.9 ... Das Paket org.springframework.jdbc.core.simple * ... 450
6.10 ... Das Paket org.springframework.jdbc.object * ... 457
6.11 ... Transaktionen ... 460
7. Jakarta Persistence mit Spring ... 475
7.1 ... Welt der Objekte und der Datenbanken ... 475
7.2 ... Jakarta Persistence ... 481
7.3 ... Spring Data JPA ... 484
7.4 ... Die Jakarta-Persistence-Entity-Bean ... 487
7.5 ... Die Jakarta Persistence API ... 494
7.6 ... Die Jakarta Persistence Query Language (JPQL) ... 501
7.7 ... Datenbankfunktionen aufrufen und native SQL-Abfragen senden ... 523
7.8 ... Schreibender Zugriff mit dem EntityManager in Transaktionen ... 530
7.9 ... Persistence Context und weitere Transaktionssteuerungen ... 537
7.10 ... Weiterführende O/R-Metadaten ... 542
7.11 ... Beziehungen zwischen Entitäten ... 563
7.12 ... FetchType: Lazy und Eager Loading ... 577
7.13 ... Cascading ... 582
7.14 ... Repositories ... 587
8. Spring Data JPA ... 597
8.1 ... Welche Aufgaben erfüllt Spring Data? ... 597
8.2 ... Spring Data Commons: CrudRepository ... 599
8.3 ... Untertypen von CrudRepository: JpaRepository usw. ... 605
8.4 ... Blättern und Sortieren mit [List]PagingAndSortingRepository ... 609
8.5 ... QueryByExampleExecutor * ... 620
8.6 ... Eigene Abfragen mit @Query formulieren ... 626
8.7 ... Stored Procedures (gespeicherte Prozeduren) * ... 636
8.8 ... Derived Query Methods ... 640
8.9 ... Die Criteria API und der JpaSpecificationExecutor ... 647
8.10 ... Alternativen zu JDBC und Jakarta Persistence ... 659
8.11 ... Gutes Design mit Repositories ... 673
8.12 ... Projektionen ... 678
8.13 ... [Fetchable]FluentQuery * ... 685
8.14 ... Auditing * ... 687
8.15 ... Incremental Data Migration ... 691
8.16 ... Die Datenzugriffsschicht testen ... 697
9. Spring Data für NoSQL-Datenbanken ... 709
9.1 ... Not only SQL ... 709
9.2 ... MongoDB ... 710
10. Spring Web ... 725
10.1 ... Webserver ... 725
10.2 ... Dynamische Inhalte generieren ... 732
10.3 ... Spring Web MVC ... 737
10.4 ... Hot Code Swapping ... 744
10.5 ... Das Hypertext Transfer Protocol (HTTP) ... 745
10.6 ... Request Matching ... 748
10.7 ... Response senden ... 751
10.8 ... Request auswerten ... 763
10.9 ... Typkonvertierung der Parameter ... 789
10.10 ... Ausnahmebehandlung und Fehlermeldung ... 798
10.11 ... Webservices und RESTful API ... 813
10.12 ... GraphQL ... 816
10.13 ... Asynchrone Web-Requests * ... 845
10.14 ... Spring Data Web Support ... 849
10.15 ... Dokumentation einer RESTful API mit OpenAPI ... 856
10.16 ... Testen der Webschicht ... 866
10.17 ... Best Practices bei der Nutzung einer RESTful API ... 876
10.18 ... Webanwendungen mit Spring Security absichern ... 883
10.19 ... RESTful Webservices konsumieren ... 913
11. Spring AI ... 931
11.1 ... Was ist künstliche Intelligenz? ... 931
11.2 ... Ollama ... 933
11.3 ... KI-Modelle in Java-Programmen integrieren ... 935
11.4 ... Spring AI nutzen ... 936
11.5 ... Prompt aufbauen ... 940
11.6 ... Nachrichtenmodell und Prompt-Struktur ... 943
11.7 ... Strukturierte Ausgaben und Objekt-Mapping ... 948
11.8 ... Zugriff auf aktuelle und lokale Daten ... 951
11.9 ... Advisors ... 958
11.10 ... Verwaltung von Konversationskontext mit ChatMemory ... 962
11.11 ... Vektoren, Embeddings und semantische Suche ... 965
11.12 ... Ausblick ... 971
12. Logging und Monitoring ... 973
12.1 ... Logging ... 973
12.2 ... Logging-Implementierung ... 974
12.3 ... Anwendungen mit dem Spring Boot Actuator überwachen ... 982
12.4 ... Micrometer und Prometheus ... 991
13. Build und Deployment ... 999
13.1 ... Spring-Boot-Programme verpacken und ausführen ... 999
13.2 ... Spring-Anwendungen im OCI-Container ... 1002
Index ... 1015
Vorwort
Was ist Spring Boot?
Spring Boot ist aktuell das wichtigste Java-Enterprise-Framework und bietet der Entwicklergemeinschaft viele Vorteile: Es ist leicht zu lernen und zu verwenden und erleichtert die Entwicklung von Microservices. Richtig entwickelt, sind Spring-Boot-Anwendungen skalierbar und eignen sich daher perfekt für robuste Unternehmensanwendungen.
Vorkenntnisse und Zielgruppe
Spring ist ein sehr beliebtes Framework in der Java-Community und hat sich in den vergangenen Jahren zu einem Quasistandard entwickelt. Daher wurde dieses Buch für alle diejenigen konzipiert, die Unternehmensanwendungen mit Datenbankanbindung und Webservices entwickeln möchten. Es ist sowohl für Anfänger als auch für Fortgeschrittene geeignet und liefert zahlreiche praktische Beispiele.
Voraussetzung sind robuste Java-Kenntnisse und der sichere Umgang mit Werkzeugen wie Maven. Mit relationalen Datenbanken sollte die Leserschaft grundlegend vertraut sein.
Die Demoanwendung Date4u, Aufgaben und Lösungen
Mit diesem Handbuch und einer Entwicklungsumgebung des Vertrauens lassen sich Spring-Programme entwickeln. Um ein neues Framework zu erlernen, reicht das Lesen aber nicht aus. Wer eine Programmiersprache oder ein Framework erlernen möchte, muss sie bzw. es wie eine Fremdsprache üben und »sprechen«. Java ist dabei die Sprache mit ihrer Grammatik, Spring liefert das Vokabular für die Anwendungsentwicklung.
Zur genaueren Erläuterung wird in diesem Buch eine Dating-Anwendung für Einhörner implementiert. Dieses unterhaltsame Beispiel demonstriert alle zentralen Bestandteile einer Enterprise-Anwendung: das Zusammenspiel von Komponenten, die Speicherung der Profildaten in einer Datenbank und den Zugriff über Webservices. Die Leserschaft wird Schritt für Schritt durch die Anwendung geleitet, und im Text eingestreut finden sich immer wieder Aufgaben, die zur Übung einladen. Zu jeder Aufgabe folgt ein Lösungsvorschlag, sodass sich der Text linear lesen lässt. Die Anwendung Date4u ist per Download verfügbar (siehe https://rheinwerk-verlag.de/6362).
Organisation der Kapitel
Das Buch gliedert sich in folgende Kapitel:
Kapitel 1, »Einleitung und erstes Beispiel«, stellt das Spring Framework und die »Erweiterung« Spring Boot vor. Es wird gezeigt, wie ein Projekt angelegt wird. Außerdem werden der Aufbau der Maven-POM-Datei sowie die Bedeutung der Starter und Dependencies erläutert.
In Kapitel 2, »Container für Spring-managed Beans«, steht der Spring-Kontext im Mittelpunkt. Schritt für Schritt wird aus einer einzigen Klasse ein Geflecht von Spring-managed Beans aufgebaut, um Bilder im Dateisystem abzulegen und zu laden.
Die Verwaltung von Spring-managed Beans ist eine Kernaufgabe des Spring Frameworks, aber es gibt viele weitere Features, die Kapitel 3, »Ausgewählte Module des Spring Frameworks«, anspricht. Dazu zählen die externe Konfiguration, die Ereignisbehandlung, Konvertierungsklassen und diverse Utility-Klassen.
Kapitel 4, »Testgetriebene Entwicklung mit Spring Boot«, zeigt, warum automatisierte Tests ein fester Bestandteil der Entwicklung sind. Dazu gehören Tests außerhalb des Spring-Containers, Tests innerhalb des Spring-Containers mit Kontext sowie der Einsatz von Mocking, um Abhängigkeiten gezielt zu ersetzen.
In Kapitel 5, »Ausgewählte Proxies«, geht es mit besonderen »Ringen« weiter, die sich um Komponenten legen und damit das Caching, asynchrone Aufrufe oder die Validierung übernehmen. Das bietet den Vorteil, dass bestimmte Aufgaben an das Framework verlagert werden können, sodass der eigene Code schlanker wird.
In den ersten fünf Kapiteln stehen der Spring-Container und Hilfsklassen im Mittelpunkt, aber keine Speichertechnologien. Das ändert sich in Kapitel 6, »Relationale Datenbanken anbinden«. In diesem Kapitel wird ein Datenbankmanagementsystem vorbereitet, und es werden SQL-Anfragen an die Datenbank demonstriert.
Das Schreiben in Datenbanken mit der JDBC-API ist einfach und direkt, aber unkomfortabel. Daher führt Kapitel 7, »Jakarta Persistence mit Spring«, in das objektrelationale Mapping ein.
Datenzugriffsschichten sind in jeder größeren Anwendung nötig. Kapitel 8, »Spring Data JPA«, stellt ihre Möglichkeiten exemplarisch anhand des Familienmitglieds Spring Data JPA vor. Repositories lassen sich damit einfach schreiben, und viele Abfragen und Datentransformationen werden vom Framework realisiert.
Relationale Datenbanken werden flankiert von nichtrelationalen Datenbanksystemen, die ebenfalls ausgezeichnet in die Spring-Data-Familie integriert sind. Kapitel 9, »Spring Data für NoSQL-Datenbanken«, zeigt am Beispiel von MongoDB, wie die Spring-Data-Konzepte in die NoSQL-Welt übertragen werden.
Nachdem mit der Datenhaltung ein wichtiger Teil der Infrastruktur beschrieben wurde, geht es mit Anwendungen des HTTP-Protokolls in Kapitel 10, »Spring Web«, weiter. Dort stehen RESTful Webservices und HTTP-Clients im Mittelpunkt.
Kapitel 11, »Spring AI«, bietet einen Einblick in die neue API zur Nutzung von Large Language Models.
Mit dem bisher erworbenen Wissen lässt sich eine Anwendung betreiben, aber es ist wichtig, auch von außen in die Anwendung schauen zu können, um zu prüfen, ob die »Betriebstemperatur« stimmt. Kapitel 12, »Logging und Monitoring«, stellt mit dem Actuator-Projekt eine Möglichkeit vor, Daten einer Anwendung freizugeben, die dann von externen Lösungen abgeholt und visualisiert werden können.
Dass ein Programm in der Entwicklungsumgebung und bei den Testfällen nicht versagt, ist gut, aber nur die halbe Miete: Ein Programm muss ausgespielt werden. Dazu stellt Kapitel 13, »Build und Deployment«, unter anderem OCI-Container (aka Docker) vor.
Die *-Abschnitte
Das Spring-Universum ist reich an Feinheiten und verwirrt Einsteiger und Einsteigerinnen oft. Um das nötige Wissen vom verzichtbaren Wissen zu trennen, enden einige Überschriften mit einem *, was bedeutet, dass dieser Abschnitt übersprungen werden kann, ohne dass der Leserschaft etwas Wesentliches für die späteren Kapitel fehlt.
Welche Java-Version wird im Buch genutzt?
Die Mindestanforderung für Spring Boot 4 ist Java 17. Für neue Projekte empfiehlt sich jedoch in der Regel eine aktuelle Long-Term-Support-Version des JDK, da diese von den Herstellern über mehrere Jahre mit Updates und Support versorgt wird. Alle Beispiele in diesem Buch wurden mit Java 26 getestet.
Benötigte Software
Wollen wir Java-Programme laufen lassen, benötigen wir eine JVM. In der Anfangszeit war das einfach. Die Laufzeitumgebung stammte erst von Sun Microsystems, später von der Firma Oracle, die Sun übernommen hatte. Heute ist das deutlich unübersichtlicher. Diverse Institutionen kompilieren das OpenJDK (die Originalquellen enthalten Hunderttausende Zeilen C[++]- und Java-Quellcode) und bündeln es in einer Distribution, die Java-Laufzeitumgebung. Die bekanntesten Laufzeitumgebungen sind:
-
Eclipse Adoptium (https://adoptium.net/),
-
Amazon Corretto (https://aws.amazon.com/de/corretto) und
-
Red Hat OpenJDK (https://developers.redhat.com/products/openjdk/overview).
Hinzu kommen weitere, wie die von Azul Systems oder Bellsoft. Zum Lernen mit diesem Buch kann man sich frei für eine Distribution entscheiden; mit Adoptium liegt man gut.
Die Entwicklungsumgebung
Java-Quellcode ist nur Text, sodass im Prinzip ein einfacher Texteditor reicht. Allerdings können wir mit einem Editor wie Notepad keine große Produktivität erwarten. Moderne Entwicklungsumgebungen unterstützen uns in vielerlei Hinsicht: durch farbige Hervorhebungen von Schlüsselwörtern, automatische Codevervollständigung, intelligente Fehlerkorrektur, durch das Einfügen von Codeblöcken, die Visualisierung von Zuständen im Debugger und durch vieles mehr. Es ist daher ratsam, eine vollständige Entwicklungsumgebung zu verwenden. Drei populäre IDEs sind: IntelliJ, Eclipse und Visual Studio Code.
Die Wahl der Entwicklungsumgebung ist wie bei den Laufzeitumgebungen...




