Hilfsmittel für mehr Java-Produktivität Die Qual der Wahl bei den Java-Frameworks

Von Filipe Pereira Martins und Anna Kobylinska |

Anbieter zum Thema

Java-Entwicklern steht heute eine üppige Auswahl an leistungsstarken Hilfsmitteln zur Verfügung. Ob Embedded, mobil oder Cloud-nativ: Für jedes Softwareprojekt gibt es Frameworks zur Genüge. Wer in Java codet, hat die Qual der Wahl.

Leistungsstarke Java-Frameworks können die Entwicklererfahrung verbessern und die Produktivität auf ein völlig neues Niveau heben.
Leistungsstarke Java-Frameworks können die Entwicklererfahrung verbessern und die Produktivität auf ein völlig neues Niveau heben.
(Bild: Crew / Unsplash)
eBook Java-Tools und -Frameworks
eBook „Java-Tools und -Frameworks“
(Bild: Dev-Insider)

E-Book zum Thema

Das redaktionelle eBook „Java-Tools und -Frameworks“ beleuchtet, wo Java im Großen und Ganzen hinsteuert und was auf die Java-Anwendungsentwickler so alles zukommt.


Java ist die beliebteste JVM-Sprache, doch konkurrenzlos ist sie sicherlich nicht. Leistungsstarke Java-Frameworks können die Entwicklererfahrung verbessern und die Produktivität auf ein völlig neues Niveau heben. Doch ganz ohne Stolpersteine klappt das oft leider nicht. Zu den Voraussetzungen für den Erfolg zählt eine leistungsstarke IDE.

IDEs und Build-Systeme

Die beliebtesten Java-Frameworks laut Snyk.
Die beliebtesten Java-Frameworks laut Snyk.
(Bild: Snyk)

Die Dominanz der Entwicklungsumgebung IntellIJ IDEA von JetBrains hält das Java-Ökosystem in ihrem Bann. Laut der Snyk-Umfrage verwenden 51,3 Prozent die kostenpflichtige Edition Ultimate und 27,3 Prozent die kostenfreie Ausbaustufe Community. Eclipse kann nahezu unverändert 20 Prozent der Nutzerbasis für sich verbuchen. JetBrains kommt zusammengerechnet auf ähnliche Zahlen (75 Prozent).

Zahlen von Snyk aus dem Jahre 2021 erwecken den Eindruck, als ob die Popularität von Visual Studio Code (23,2 Prozent) und Apache Netbeans (nahezu 13 Prozent) gegenüber dem Vorjahr (2 Prozent respektive ein Prozent) sprunghaft angestiegen wäre. Die Autoren der Studie führen den scheinbaren Zuwachs jedoch auf die neue Methodologie zurück, die Mehrfachnennungen zulässt.

Zunehmend viele Entwickler verwenden offenbar mehr als eine IDE: Mal kommt zusätzlich zu der Haupt-IDE ein Werkzeug aus einer anderen Umgebung zum Einsatz. Wer JetBrains IntellIJ IDEA oder Eclipse vorzieht, greift hin und wieder beispielsweise auf Tools von Apache Netbeans oder VS Code zurück.

Drei von vier Java-Entwickler nutzen laut JetBrains in der Build-Phase Maven (72 Prozent). Rund jeder Zweite (49 Prozent) vertraut auf Gradle. Als Nummer Drei kann Ant gerade einmal einen Anteil von 8 Prozent für sich verbuchen.

Frameworks und ihre Tücken

Bei einem Framework ist von einer Sammlung von vorgefertigtem, wiederverwendbarem Code die Rede, der in die entstehende Anwendung hineinfließt, um sie um die benötigte Funktionalität zu ergänzen, ohne jedes Mal das Rad neu erfinden zu müssen. Java-Frameworks können vordefinierte Klassen und Funktionen enthalten, die zur Verarbeitung, Eingabe und Verwaltung von Hardware-Geräten sowie zur Interaktion mit Systemsoftware dienen.

Java-Entwickler nutzten generell „viele Frameworks und Bibliotheken“, resümiert Brian Vermeer, Developer Advocate bei Snyk, die Erkenntnisse der Studie „JVM Ecosystem Report 2021“. Der Einsatz würde jedoch seinen Preis fordern, beobachtet er. Denn Entwickler „müssen diese Bibliotheken genauso pflegen wie ihren eigenen, selbst geschriebenen Code“, warnt Vermeer. Große Frameworks hätten eine Menge transitive Abhängigkeiten, die dann in den resultierenden Java-Code Einzug hielten. Java-Entwickler müssten sich über die Stolpersteine im Klaren sein und darauf achten, dass ihre Abhängigkeiten gut gewartet und frei von Sicherheitslücken seien. Bei diesen Aufgaben will Snyk.io helfen.

Der Platzhirsch und die Herausforderer

Das mit Abstand beliebteste serverseitige Framework der Java-Gemeinde ist nach wie vor das quelloffene Spring Framework. Wer dahinter steckt ist kein Geringerer als VMware. Laut der dritten jährlichen Entwicklerumfrage von Diffblue verlassen sich auf Spring insgesamt erstaunliche 86 Prozent aller Java-Softwareingenieure. Diffblue ist Anbieter der weltweit ersten KI-für-Code-Lösung, die das Schreiben von Unit-Tests für Java automatisieren will.

Snyk bescheinigt dem Spring Framework eine ähnlich hohe Marktdurchdringung wie Diffblue, wenn man die Zahlen von Spring Boot und Spring MVC in der Snyk-Umfrage zusammenrechnet (86,3 Prozent). Mehr als jeder zweite Java-Entwickler würde demnach auf Spring Boot vertrauen (57 Prozent). Rund jeder dritte nutzt laut Snyk (auch) Spring MVC.

eBook Java-Tools und -Frameworks
eBook „Java-Tools und -Frameworks“
(Bild: Dev-Insider)

E-Book zum Thema

Das redaktionelle eBook „Java-Tools und -Frameworks“ beleuchtet, wo Java im Großen und Ganzen hinsteuert und was auf die Java-Anwendungsentwickler so alles zukommt.


JetBrains ging seinerseits in der Umfrage für die Studie „The State of Developer Ecosystem 2021“ unter anderem der Frage nach den beliebtesten Web-Frameworks in der Java-Gemeinde nach. Auch in diesem Segment dominiert das Spring Framework, vertreten durch Spring Boot (mit 65 Prozent der Entwickler) und Spring MVC (42 Prozent). Die Popularität von Spring Boot sei gegenüber dem Vorjahr gestiegen. Zugleich ließe sich ein verstärktes Aufkommen von neuen Nischenlösungen beobachten.

Neuere Cloud-native Java-Frameworks wie Quarkus und Micronaut gewinnen überraschend an Popularität. Diesen Frameworks liegt ein neues Konzept zu Grunde: Die Bereitstellung einer Java-Anwendung erfolgt zur Build-Zeit und so entsteht eine leichtgewichtige Runtime, frei von Reflexion und dem Laden von Klassen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Bei der Ausführung von Modultests (engl. Unit Testing) vertrauen mehr als acht von zehn Java-Codern laut JetBrains auf JUnit (85 Prozent). Nahezu jeder Zweite (45 Prozent) setzt Mockito ein. Frameworks wie PowerMock, TestNG, Spock, EasyMock und JMockit fristen ein nischenhaftes Dasein. JetBrains ist im Übrigen ein goldener Sponsor von JUnit. Die aktuelle fünfte Generation des Frameworks erhielt den begehrten Preis „Duke's Choice Award“ der Oracle Java Platform Group in der Kategorie Entwicklerproduktivität.

Die Liste der beliebtesten Web-Frameworks unter Java-Entwicklern führt laut JetBrains das Spring Framework an, vertreten durch Spring Boot und Spring MVC.
Die Liste der beliebtesten Web-Frameworks unter Java-Entwicklern führt laut JetBrains das Spring Framework an, vertreten durch Spring Boot und Spring MVC.
(Bild: JetBrains)

Einige Entwickler setzen Java-Frameworks als Alternative zu einem Anwendungsserver ein. In dieser Kategorie dominiert laut JetBrains wie erwartet Spring Boot mit einem Anteil von 66 Prozent, gefolgt von Netty (zehn Prozent), Spark Java und Undertow (mit je vier Prozent) sowie Vert.x (drei Prozent). Rund jeder dritte Java-Coder hat für diese spezielle Aufgabenstellung kein Framework im Einsatz.

Unter den Java-Entwicklern, die Anwendungsserver benutzen, würden knapp drei Viertel (72 Prozent) einen Embedded-Server mit ihren Anwendungen ausliefern. Fast jeder Zweite (45 Prozent) verpackt seine Anwendungen als Artefakte.

VMware Spring und seine Design-Muster

Spring hat mit seiner Fähigkeit zur Injektion von Abhängigkeiten für Inversion of Control (IoC) und mit anderen ähnlich pragmatischen Ansätzen das Java-Ökosystem beinahe im Sturm erobert. Bei Inversion of Control (IoC) ist von einem Grundsatz der Softwareentwicklung die Rede, welches die Kontrolle über Objekte oder Teile eines Programms auf einen Container oder ein Framework überträgt. Im Gegensatz zum traditionellen Ansatz, bei dem benutzereigener Code eine Bibliothek aufruft, übernimmt hier das Framework die Programmflusskontrolle. So gerät die Anwendung ungeachtet der auftretenden Ereignisse niemals ins Stottern.

Inversion of Control in Spring erfolgt durch die Injektion von Abhängigkeiten (Dependency Injection) von Settern, Methoden und Konstruktoren. Mit IoC in Spring lassen sich so die sogenannten „lose gekoppelten“ Klassen und Module umsetzen: Das Framework handhabt eigenständig die Abhängigkeiten, anstatt sich auf den Anwendungscode zu verlassen.

eBook Java-Tools und -Frameworks
eBook „Java-Tools und -Frameworks“
(Bild: Dev-Insider)

E-Book zum Thema

Das redaktionelle eBook „Java-Tools und -Frameworks“ beleuchtet, wo Java im Großen und Ganzen hinsteuert und was auf die Java-Anwendungsentwickler so alles zukommt.


Spring ruft Objekte als Beans auf, also wiederverwendbare Komponenten, die ein oder mehrere Objekte verkapseln und auf eine standardisierte Art und Weise zugänglich machen. Spring konfiguriert und verwaltet die Beans in einer BeanFactory, einem von zwei IoC-Containern in Spring. Anwendungen mit besonderen Ansprüchen können auch ApplicationContext, eine Obermenge von BeanFactory, verwenden, um sich die Ereignisweiterleitung, deklarative Mechanismen und die Integration mit aspektorientierten Funktionen von Spring zu eigen zu machen.

Mit seinen anwendungsfallspezifischen Frameworks hat Spring eine Vielzahl von innovativen Design-Mustern popularisiert, zum Beispiel:

  • Spring Data vereinheitlicht und vereinfacht den Zugang zu verschiedenen Arten von Persistenzspeichern – sowohl relationalen Datenbanksystemen als auch NoSQL-Datenspeichern.
  • Spring Security, der De-facto-Standard für die Sicherung Spring-basierter Anwendungen, hilft bei der Implementierung von Authentifizierung, Autorisierung und Zugriffskontrolle zum Schutz vor gängigen Angriffen.
  • Spring Batch bietet wiederverwendbare Funktionen zur Verarbeitung großer Mengen von Datensätzen, darunter Protokollierung/Verfolgung, Transaktionsmanagement, Auftragsverarbeitungsstatistiken, Auftragsneustart, Überspringen von Aufträgen und Ressourcenmanagement.
  • Spring Integration erweitert das Programmiermodell von Spring um Unterstützung von Enterprise Integration Patterns für leichtgewichtiges Messaging und die Kommunikation mit externen Systemen über deklarative Adapter.
  • Spring Cloud Stream ist ein Framework für den Aufbau hoch skalierbarer, ereignisgesteuerter Microservices, die mit gemeinsamen Messaging-Systemen verbunden sind. Es bietet ein flexibles Programmiermodell, das auf bereits etablierten und vertrauten Spring-Idiomen und Best Practices aufbaut, einschließlich der Unterstützung für persistente Pub/Sub-Semantik, Consumer-Gruppen und zustandsabhängige Partitionen.
  • Spring Cloud Data Flow bietet unter anderem Tools zur Erstellung komplexer Topologien für Streaming- und Batch-Datenpipelines, die aus Spring-Boot-Anwendungen bestehen, welche den Microservice-Frameworks Spring Cloud Stream oder Spring Cloud Task „entspringen“. Es unterstützt eine Reihe von Anwendungsfällen für die Datenverarbeitung – von ETL über Import/Export und Event-Streaming bis hin zu Predictive Analytics.
  • Spring MVC ist ein Spring-Modul zum Erstellen von Web-Anwendungen nach dem Model-View-Controller-Paradigma (MVC steht für Model View Controller, ein Softwareentwurfsmuster für die Entwicklung von Webanwendungen, das sie in drei funktionale Bauteile – Model, View, Controller – aufteilt).
  • Spring WebFlux ist nicht-blockierend (zur Gewährleistung von Gleichzeitigkeit mit einer geringen Anzahl von Threads und der Skalierung mit wenigen Hardwareressourcen), funktionell (um deklarative Komposition von asynchroner Logik zu ermöglichen) und reaktiv (um den Fluss von Ereignissen kontrollieren zu können).

Das ursprüngliche Web-Framework von Spring, Spring Web MVC, wurde speziell für die Servlet-API und Servlet-Container entwickelt. Spring WebFlux kam später in der Version 5.0 hinzu. Es ist vollständig blockierungsfrei, unterstützt Reactive Streams Back Pressure und läuft auf Servern wie Netty, Undertow und Servlet 3.1+ Containern. Beide Web-Frameworks spiegeln die Namen ihrer Quellmodule (spring-webmvc und spring-webflux) wider, sind optional und existieren friedlich nebeneinander. Anwendungen können das eine oder das andere Modul oder in einigen Fällen auch beide verwenden, zum Beispiel Spring MVC-Controller mit dem reaktiven WebClient.

Architektur des Spring-Frameworks.
Architektur des Spring-Frameworks.
(Bild: Spring.io)

Spring Boot ist ein Spring-Modul zum Verpacken einer Spring-basierten Anwendung mit sensiblen Konfigurationseinstellungen. Es glänzt durch seine Simplizität beim Erstellen einer Standalone-Anwendung mit minimalen oder gar ohne Konfigurationsmöglichkeiten. Spring Boot reduziert den Standardcode (engl. Boilerplate Code) auf ein Minimum. Im Gegensatz zu Spring trumpft es mit eingebauter Unterstützung für In-Memory-Datenbanken auf, bezieht seine Abhängigkeiten automatisch und stattet die Anwendung mit ihrem eigenen Server aus.

GraalVM Native Images mit Spring Native „tiefer legen“

Mit GraalVM, einem JDK mit einer Java-VM auf der Basis von HotSpot/OpenJDK, können Entwickler ihren Java-Code in eine eigenständige ausführbare Datei, ein sogenanntes Native Image, vorzeitig (ahead of time) kompilieren. GraalVM Native Images verwandeln JVM-Applikationen in leichtgewichtige, schnelle, architekturspezifische Anwendungs-Binaries dank statischer Analyse und intelligentem Laden von Klassen.

Das Verwerfen von überflüssigem Ballast kann aber gelegentlich zu weit gehen, wenn zur Laufzeit benötigte Komponenten vorab hinweg optimiert wurden. Dies kann zum Beispiel Java Native Interface (JNI), das Laden von Ressourcen, die Serialisierung, Java Reflection und dynamische Proxies in ihrer Funktionsweise beeinträchtigen.

Mit GraalVM kann zwar gewählt werden, welche zusätzlichen Klassen erhalten bleiben sollen, doch dieser manuelle Prozess ist fehlerträchtig. Spring Native schafft Abhilfe.

Spring Native legt nämlich noch eins drauf: Das Framework kennt das dynamische Verhalten der jeweiligen Spring-Boot-Anwendung und wird das Ziel nicht verfehlen.

Eine Spring-Native-Anwendung startet schneller – in Millisekunden statt in Sekunden oder gar Minuten, aber außer beim Einsatz von „serverless“ (zum Beispiel mit Spring Cloud Function) geht die Performance ohnehin flöten. Die nativen GraalVM Images spielen ihre hohe Effizienz zur Laufzeit aus. Die hierzu benötigten Images manifestieren sich lediglich in Dutzenden von Megabytes statt in Hunderten. Dabei ist der Einstieg relativ einfach: mit Spring Initializr.

Fazit

Das Java-Ökosystem bietet Entwicklern eine üppige Auswahl an Hilfsmitteln. Java-Entwickler haben die Qual der Wahl.

Dieser Beitrag ist einer von drei Artikeln aus unserem eBook „Barrierefreie Software-Entwicklung. Darin haben wir auch die Trends und etablierte Software Development Kits beleuchtet.

E-Book zum Thema

Java-Tools und -Frameworks

eBook Java-Tools und -Frameworks
eBook „Java-Tools und -Frameworks“
(Bild: Dev-Insider)

Deutschlands meistgenutzte Programmiersprache, Java, steht vor einem Wendepunkt. Dieses eBook beleuchtet, wo Java im Großen und Ganzen hinsteuert und was auf die Java-Anwendungsentwickler so alles zukommt.

Highlights in diesem eBook:

  • Das Java-Ökosystem: Trends und Neuerungen
  • Auf Erkundungstour durch die JDKs
  • Die Qual der Wahl bei den Java-Frameworks


(ID:48743170)