
Leben und arbeiten 50 Meter unter Wasser: Diese neue Station ist ein ungewöhnliches Office
13. November 2025
5 Gründe gegen KI-Leaderboards
13. November 2025
Kichigin | shutterstock.com
Spring ist vermutlich das bekannteste aller Frameworks für die Softwareentwicklung. Das quelloffene Rahmenwerk wurde erstmals im Jahr 2002 veröffentlicht – und seitdem hat sich einiges getan. Das Spring Framework umfasst inzwischen neuere Java-Funktionen wie das verbesserte, strukturierte Concurrency-Modell und bietet gleichzeitig Zugriff auf ein umfangreiches Ökosystem von Bibliotheken und Modulen, die für gängige Anwendungsanforderungen und -architekturen entwickelt wurden. Anders (und deutlich prägnanter) ausgedrückt: Spring ist auch 2025 eine ausgezeichnete Wahl für Softwareentwickler.
In diesem Artikel werfen wir einen umfassenden Blick auf das modernisierte Spring Framework.
Vereinheitlichte Dependency Injection
Das Herzstück von Spring ist nach wie vor seine Dependency-Injection-Engine. Dependency Injection (DI) – auch als Inversion of Control (IOC) bekannt – ist eine Methode, um Klassen miteinander zu verbinden, ohne den verbindenden Code explizit in den Klassen selbst zu erstellen.
In der modernen Version von Spring funktioniert DI auf der Grundlage von Konventionen, wobei Entwickler nur minimal eingreifen müssen. Anders als in der Vergangenheit ist XML-Management dabei in der Regel kaum oder gar nicht erforderlich. Die meisten Spring-Beans lassen sich mit nur wenigen Annotationen automatisiert “verkabeln”: Das Framework scannt das Projekt und injiziert automatisch die richtige Abhängigkeit.
Im nachfolgenden Beispiel sehen Sie, wie eine Repository– mit einer Service-Komponente verbunden wird:
@Component
public class MovieFinder {
public List findByGenre(String genre) {
if ("sci-fi".equalsIgnoreCase(genre)) {
return List.of("Blade Runner", "Total Recall", "The 5th Element");
} else {
return List.of("The Godfather", "The Princess Bride");
}
}
}
@Component
public class MovieRecommender {
private final MovieFinder movieFinder;
// Automatically injected:
public MovieRecommender(MovieFinder finder) {
this.movieFinder = finder;
}
public String recommendMovie(String genre) {
List movies = movieFinder.findByGenre(genre);
return movies.get(0);
}
}
Die beiden Klassen als @Components zu deklarieren, reicht bereits aus, damit Spring sie zusammenfügt (solange der Konstruktor der injizierten Komponente – in diesem Fall der Standardkonstruktor – mit der Referenz der konsumierenden Komponente übereinstimmt). Die DI-Implementierung von Spring zu nutzen, um Komponenten miteinander zu verbinden, fühlt sich fast schon wie eine Java-Erweiterung an.
Schlüsselkomponente Spring Boot
Das modernisierte Spring-Framework basiert zudem auf Spring Boot, das einen schonenden Zugriff auf die umfangreichen Ressourcen des Rahmenwerks ermöglicht. Durch Spring Boot sind zudem manuelle Startprozesse bei neuen Spring-Anwendungen passé.
Spring-Boot-Apps, die @SpringBootApplication enthalten, konfigurieren sogar Abhängigkeiten wie Data Stores automatisiert. Natürlich ist es jederzeit möglich, die Standardkonfigurationen durch manuelle zu überschreiben (etwa, wenn Sie Ihre eigene DataStore-Komponente erstellen müssen).
Spring Boot beinhaltet darüber hinaus auch Dependency Starters. Damit lassen sich Abhängigkeiten einbinden, die alles enthalten, was für einen bestimmten Bereich benötigt wird. So zieht beispielsweise spring-boot-starter-web automatisch Spring MVC, Jackson XML sowie einen Embedded Server hinzu. Ein manueller Eingriff ist nicht mehr nötig.
Spring Boot wurde zielführend vereinheitlicht und macht es inzwischen wirklich einfach, Projekte auf der Grundlage von Best Practices aufzusetzen. Bei Bedarf lassen sich auch schrittweise komplexere oder benutzerdefinierte Funktionen hinzufügen.
Optimierte Dev Experience
Die moderne Variante des Spring Frameworks zeigt sich auch mit Blick auf die Developer Experience optimiert. So bietet das Rahmenwerk inzwischen erstklassigen Testing-Support. Über Unit-Tests hinaus lässt sich dazu mit Spring Boot einfach der spring-boot-starter-test-Starter einbinden. Mit der Annotation @SpringBootTest ist es möglich, die gesamte Anwendung in einem Testkontext zu starten.
Spring Boot bietet außerdem eine erstklassige Integration mit TestContainers. Darüber lassen sich Profile erstellen, um Tests in vollständig konfigurierten Containern (wie Docker) durchzuführen, die nicht nur die Anwendung selbst, sondern auch architektonische Abhängigkeiten wie Datenbanken enthalten.
In ähnlicher Weise können mit spring-boot-starter-actuator schnell produktionsreife Services wie Monitoring oder Management hingefügt werden. Das sind wesentliche Anforderungen in einer Cloud-Umgebung, die eine automatisierte Überwachung des Anwendungszustands und der LoS-Metriken (Level of Service) ermöglichen. Actuator generiert verschiedene Endpunkte für Ihre Anwendung, darunter /actuator/health, /actuator/metrics und /actuator/info.
Gemacht für moderne Cloud-Umgebungen
Einst wurde Spring mit langsam startenden Anwendungen in Verbindung gebracht, aber diese Zeiten sind längst vorbei. Moderne Spring-Anwendungen lassen sich mit GraalVM “Ahead of Time” (AOT) zu einer nativen Binärdatei kompilieren. Das gewährleistet, dass Applikationen nahezu sofort starten – und ist ein entscheidender Benefit für Serverless Deployments, bei denen Instanzen entsprechend der jeweiligen Nachfrage gestartet und gestoppt werden. Während der AOT-Kompilierungsphase scannt und verknüpft Spring auch sämtliche verbundenen Komponenten (Spring Beans). Das gewährleistet, dass Anwendungen nicht durch Klassen verlangsamt werden, die DI verwenden.
In Zusammenhang mit der Cloud ist zudem erwähnenswert, dass moderne Spring-Anwendungen auch alle Vorteile der JVM nutzen. Neuere Java-Funktionen wie virtuelle Threads und kontinuierliche Verbesserungen wie kompakte Header sind bei Cloud-gehosteten Anwendungen von Vorteil.
Ein weiterer wichtiger Trend in der modernen Softwareentwicklung – insbesondere in der Cloud – ist die reaktive Programmierung. Dieses Paradigma wird von Spring vollumfänglich unterstützt. Reaktive Programmierung ist asynchron und bietet ein vollständiges Konzeptmodell, um Echtzeit-Datenströme zu verarbeiten. Der Zugriff auf dieses Paradigma erfolgt über das WebFlux-Modul von Spring, das für diesen Zweck konzipiert wurde.
Wenn WebFlux zum Einsatz kommt, ist der Rückgabetyp eines Endpunkts ein Flux-Objekt – statt einer Standard-Collection. Das ermöglicht, die Ergebnisse zurückzustreamen, sobald diese verfügbar sind:
@RestController
public class MovieController {
private final MovieRepository movieRepository;
public MovieController(MovieRepository movieRepository) {
this.movieRepository = movieRepository;
}
// Notice the return type
@GetMapping("/movies")
public Flux getAllMovies() {
return movieRepository.findAll();
}
}
Wenn eine Datenverarbeitung mit hohem Durchsatz zu den Applikationsanforderungen gehört, ist WebFlux dafür eine ideale Lösung.
Java-Persistenz mit Spring Data
Spring Data ist ein hochentwickeltes, persistenzorientiertes Framework, das über Jahre hinweg verfeinert wurde. Das gewährleistet nicht nur Support für die die Jakarta Persistence API von Java, sondern erleichtert es auch, sich mit neueren Ansätzen vertraut zu machen – etwa der nachfolgenden Repository-Klasse. Diese benötigt keine Annotation, weil Spring Boot erkennt, dass es sich um eine Unterklasse der Persistenz-Basisklasse handelt:
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
public interface MovieRepository extends ReactiveCrudRepository {
// You define the method signature; Spring Data R2DBC provides the implementation
Flux findByGenre(String genre);
}
Dieser Code verwendet die Bibliothek Spring R2DBC (für relationale Datenbankverbindungen), die asynchrone reaktive Treiber nutzt. Das Schöne daran: Die Engine selbst stellt die Implementierung basierend auf den Feldern und Methoden des Datenobjekts bereit. Entwickler müssen die findByGenre-Methode nicht implementieren.
Spring Security
Moderne Websicherheit wird nie wirklich simpel sein, aber Spring trägt wesentlich dazu bei, sie so verständlich wie möglich zu gestalten. Das Besondere an Spring Security ist, dass es Benutzerfreundlichkeit mit den fortschrittlichen Funktionen verbindet, die viele Anwendungen benötigen.
Das spring-boot-starter-security-Modul von Spring Boot gestaltet es denkbar einfach, Sicherheitsfunktionen zu integrieren. Dazu bietet Spring Security diverse Komponenten – von JWT über OAuth 2.0 und OpenID Connect bis hin zu SAML und LDAP-Integration.
Dank des AOP-Supports von Spring (Aspect-Oriented Programming) lässt sich Security auch in komplexen Architekturen konsistent anwenden. Über die Sicherheit auf Methodenebene hinaus eignet sich die Security Filter Engine von Spring für alle Arten von webbasierten Sicherheitsanforderungen. (fm)
Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
Quelle:
10 Windows-Sicherheitstipps | Computerwoche




