# Ökosystem
Spring (opens new window) ist eine Sammlung von Java-Bibliotheken und -Modulen, die im Zusammenspiel viele Features zur Verfügung stellen und den Entwicklungsaufwand dabei drastisch reduzieren. Der Funktionsumfang reicht von Dependency Injection und Konfiguration, über Datenzugriff (JPA) und API (REST), bis hin zu Microservice und Cloud Unterstützung, und noch mehr. Dank Gradle-Integration hilft Spring Boot auch beim Deployment der Applikation.
# Projekte
Eine Auswahl an offiziellen Projekten findet sich auf der Webseite (opens new window). Dort gibt es beim jeweiligen Projekt unter "Learn" auch die entsprechende Dokumentation zum Projekt.
Hier ist eine Auswahl von Modulen mit kurzen Beschreibungen, um einen groben Überblick zu bekommen.
# Spring Framework
spring.io/projects/spring-framework (opens new window)
Dies ist das Kernprojekt. Hier ist das Konzept einer Anwendung enthalten. Ein großer Teil beschäftigt sich mit Dependency Injection. Mittels diversen Unterprojekten kann man auch ganz einfach REST-APIs bauen sowie MVC-Templates mit Daten füllen und ausliefern. Ferner gibt es noch diverse andere 'Spielereien', wie einen Scheduler für wiederkehrende Aufgaben oder Support für Caches.
# Spring Boot
spring.io/projects/spring-boot (opens new window)
Mit Spring Boot kann man schnell und mit wenig Code Spring Anwendungen erstellen. Es bringt Versionsvorgaben und Standardkonfigurationen für andere Module und Abhängigkeiten mit, sodass man sich nicht um jede Kleinigkeit kümmern muss. In dem Zuge bringt es auch einen Webserver mit, falls man z. B. REST-APIs bauen will.
# Spring Security
spring.io/projects/spring-security (opens new window)
Dieses Projekt bringt Authentifizierung (also die Identifikation eines Users, z. B. anhand von Benutzername und Passwort) und Autorisierung (Rollen, wer darf was) mit. Es konfiguriert dabei auch automatisch andere Module, sodass mit wenigen Zeilen REST-APIs abgesichert werden können.
# Spring Data
spring.io/projects/spring-data (opens new window)
Spring Data ist, wie der Name schon sagt, für Zugriffe auf Datenbanken (relational, NoSQL, Redis, …) gedacht. Hier kommen Technologien wie JPA und Hibernate zum Einsatz, sodass strukturierte Entities (Klassen) für den Zugriff benutzt werden können. Auch hier zeigt sich wieder sehr stark der Wenig-Code-Ansatz, denn es ist z. B. möglich dem Datenbankzugriff eine Suche nach Nachname zu spendieren, nur indem man in einem Interface eine Methode findByLastName(lastName: String) deklariert (Spring erkennt anhand vom Name, was gewollt ist und erstellt den passenden Code dazu).
Wie bei den meisten Modulen gibt es auch hier Unterprojekte, wie beispielsweise:
- Spring Data JPA: JPA Integration, z. B. via Hibernate
- Spring Data JDBC: lower Level, weniger Features
- Spring Data LDAP: LDAP-Server abfragen und LDAP-Objekte zu Klassen mappen
- Spring Data REST: automatisch CRUD REST-Endpoints mit HAL-Metadaten für Entities bereitstellen
# Spring Session
spring.io/projects/spring-session (opens new window)
Hiermit lassen sich technologie-unabhängige Sessions realisieren (also egal unter welchem Server die Anwendung läuft). Eine Integration mit Data ist auch gegeben und ermöglicht so das persistente Speichern von Benutzerzuständen – das übrigens auch verteilt, falls die Anwendung geclustert läuft. Ein nettes Feature ist auch, dass eine Session am Leben gehalten wird, solang noch Nachrichten über einen Websocket der Session hereinkommen.
# Spring Cloud
spring.io/projects/spring-cloud (opens new window)
Spring Cloud enthält viele Unterprojekte. Einerseits sind hier anbieterspezifische Module für AWS, Azure, GCP, usw. enthalten, die deren spezielle Funktionen abbilden. Andererseits sind hier auch allgemeine Technologien des Cloud-Umfelds vertreten, wie beispielsweise das Anbinden von Message Brokern für einen Message-Bus, Service Discovery oder auch Konsens für verteilte Systeme.
# Hilfe
Auf bestimmte, kleine Themen zugeschnittene Guides gibt es unter spring.io/guides (opens new window).
Ansonsten findet sich hinter dem jeweiligen Projekt unter spring.io/projects (opens new window) die entsprechende Referenz-Dokumentation, wo alles zum jeweiligen Projekt ausführlich erklärt wird.
Es gibt auch von der Community sehr viele Tutorials und Hilfetexte, Baeldung (opens new window) hält z. B. eine große Artikel-Sammlung zu diversen Spring-Themen bereit.