Rück- und Ausblick von einem der Spring-Gründerväter Wie sich das Spring Framework weiterentwickelt

Autor / Redakteur: Jürgen Höller * / Stephan Augsten

Das Spring Framework unterstützt alle Arten der Anwendungsentwicklung. Damit ist Spring eines der vielseitigsten Application Frameworks des Java-Ökosystems. Wie sich das Projekt entwickelt hat und welche Stolpersteine auf dem Weg lauerten, berichtet der Mitbegründer Jürgen Höller.

Firmen zum Thema

Der Name des Spring Frameworks stand seinerzeit für Erneuerung, aber auch das Projekt selbst entwickelt stets frische Triebe.
Der Name des Spring Frameworks stand seinerzeit für Erneuerung, aber auch das Projekt selbst entwickelt stets frische Triebe.
(Bild: jeonsango / Pixabay )

Was haben große Unternehmen wie Netflix, Allianz, Commerzbank, Daimler und öffentliche Projekte wie die Corona-Warn-App gemeinsam? Sie alle nutzen das Spring Framework, welches seit mehr als 18 Jahren existiert – fast eine Ewigkeit in der schnelllebigen IT-Welt. Um Spring und seine Bedeutung in der Entwickler-Community wirklich zu verstehen, muss man die ganze Geschichte von Spring kennen.

Wie Spring entstand

Werfen wir also einen Blick zurück auf den Oktober 2002, der Geburtsstunde von Spring. Alles begann damals, als Rod Johnson das Buch „Expert One-on-One J2EE Design and Development“ veröffentlichte. Rod kritisierte die Komplexität und schlechte Wartbarkeit von EJB 2.0 und beschloss, ein einfacheres und besser wartbares Framework für J2EE-Webanwendungen zu entwickeln.

In seinem Buch stellte er die Grundlagen und Prinzipien dieses alternativen J2EE-Frameworks vor und lieferte dazu bereits 30.000 Zeilen Quellcode. Ich erinnere mich noch genau, wie ich das Buch über die Weihnachtsferien las und sofort das große Potenzial dieses alternativen Frameworks erkannte. Viele der grundlegenden Konzepte des Spring Frameworks waren bereits enthalten – zum Beispiel ein leistungsfähiger IoC-Container (Inversion of Control) und eine ausgefeilte Implementierung des Dependency Injection Patterns.

Rods Ideen haben damals nicht nur mich beeindruckt – auch mein Entwicklerkollege Yann Caroff war ähnlich fasziniert und von den Möglichkeiten eines solchen Projekts überzeugt. Gemeinsam traten wir an Rod Johnson heran und überredeten ihn schließlich, ein Open-Source-Projekt auf Basis des Infrastruktur-Codes zu erstellen. Kurz darauf, im Februar 2003, gelang es uns, den Quellcode erstmals auf SourceForge als Open-Source-Projekt verfügbar zu machen.

Neben dem Code mussten wir uns nun auch einen Namen für das Framework einfallen lassen. Im Buch wurde es zwar noch als „Interface21 Framework“ bezeichnet, aber mit diesem Namen konnten wir letztlich natürlich keine Community begeistern. Yann schlug daraufhin „Spring“ vor – als naturbezogene Allegorie dafür, dass das neue Framework einen Neuanfang nach dem „Winter“ der traditionellen J2EE darstellt. Sowohl Rod als auch ich fanden den Namen einfach und elegant und stimmten dem Vorschlag schnell zu.

Wachstum und steigende Popularität

Im Juni 2003 erschien das erste Release in der Version 0.9 unter der Apache 2.0 Lizenz. Die offizielle Version 1.0 von Spring wurde im März 2004 veröffentlicht. Ziel war es damals, komplexe Unternehmensarchitekturen leichter test- und wartbar zu machen. Zu diesem Zweck fungiert Spring als freie, quelloffene und extrem flexible Organisationsschicht zwischen den verwendeten Komponenten.

Die Komponenten selbst müssen allerdings nicht speziell für Spring geschrieben werden. Spring basiert lose auf der JavaBeans-Konvention als Komponentenmodell. Spring konnte von Anfang an sowohl auf allen gängigen Applikationsservern oder Web-Containern als auch in einer J2SE-Umgebung (d.h. ohne J2EE-Container) eingesetzt werden.

Nach dem Start mit Spring 1.0 und dem ersten positiven Feedback von Lesern, der Entwickler-Community und Unternehmen waren wir natürlich motiviert und konnten kaum warten, das Framework weiterzuentwickeln. Im September 2004 wurde die Version 1.1 mit Bugfixes und zahlreichen neuen Features veröffentlicht. Die Version 1.2, die im Mai 2005 veröffentlicht wurde, unterstützte bereits einige Java-5-Features, wobei die Abwärtskompatibilität zu älteren Java-Versionen erhalten blieb.

Im Dezember 2005 kündigten wir die Version 2.0 an, die viele neue Funktionen brachte und im Oktober 2006 veröffentlicht wurde. Als die Version 2.0 herauskam, war das Spring Framework bereits eine Million Mal heruntergeladen worden und 2006 mit dem JAX Innovation Award sowie dem Jolt Productivity Award ausgezeichnet worden.

Bis heute hat Spring viele Entwicklungen und Neuerungen erfahren, von denen ich hier nur die wichtigsten kurz aufführen möchte:

  • 2007 - Spring Framework 2.5 führte die annotationsbasierte Konfiguration ein
  • 2009 - Spring Framework 3.0 führte Java-Konfigurationsklassen ein und setzte mindestens Java 5 voraus
  • 2013 - Spring Framework 4.0 führte vollen Support für Java 8 ein
  • 2017 - Spring Framework 5.0 führte Support für Kotlin und reaktive Architekturen ein und erforderte ein Minimum an Java 8

Besondere Herausforderungen

Natürlich verlief in den 18 Jahren der kontinuierlichen Entwicklung von Spring nicht alles ganz ohne Probleme und besondere Herausforderungen. Zum Beispiel mussten wir uns im Laufe der Zeit zunehmend mit den Veränderungen in der Komponentenmodell-Landschaft auseinandersetzen. Anfang der 2000er waren XML-basierte Komponentenbeschreibungen en vogue. Mit der Einführung von Annotationen als Java-Sprachfeature ab 2005 gab es einen Umschwung auf diese.

In den vergangenen Jahren wurde zudem verstärkt auf die direkte Abbildung von Code zur Konfiguration gesetzt. Hier mussten wir uns besonders anstrengen, aber letztendlich ist es uns gelungen, die neuen Ansätze zu unterstützen, ohne das Spring Framework grundlegend zu verändern. Eine weitere Herausforderung war die Weiterentwicklung zusammen mit Java und dem JDK – insbesondere mit den neuen Sprachkonstrukten und den neuen Bibliotheken in Java 5 und Java 8.

Hinzu kommt, dass die Datenbanklandschaft über die Jahre immer heterogener geworden ist. Zum Beispiel wurden 2010 NoSQL-Datenbanken populär und die etablierten Datenbank-APIs in Java bezogen sich einzig und allein auf relationale APIs (JDBC, JPA). Mit den Spring-Data-Projekten und einem konsistenten Programmiermodell für Datenbanken jeglicher Couleur konnten wir dieses Problem schließlich lösen. Bis heute gibt es dazu keine wirkliche Alternative in der JavaEE-Welt.

Das Spring-Boot-Projekt

Im Oktober 2012 wurde eine neue Ergänzung des Spring Frameworks aufgrund einer Anfrage eines Kunden namens Mike Youngstrom eingeführt. Er erstellte eine Feature-Anfrage in Spring Jira, die eine containerlose Webanwendungsarchitektur im Spring Framework forderte. Dies führte zur Entwicklung des Spring Boot-Projekts, die Anfang 2013 begann, und schließlich zur Veröffentlichung von Spring Boot 1.0 im April 2014.

Java- und Spring-Anwendungen bestehen aus einer großen Anzahl von technischen (Drittanbieter-)Bibliotheken, um Probleme wie Sicherheit und Persistenz zu lösen. In der Vergangenheit war es vor allem die Aufgabe der Entwicklungsteams, die Bibliotheken und insbesondere die kompatiblen Versionen dieser Bibliotheken auszuwählen.

Nachdem wir zunächst auf ein BOM-Modell (Bill of Material) für einzelne Projekte umgestiegen sind, konnten wir das Problem mit Spring Boot und seinen Starter-POMs grundlegend lösen. Entwicklerteams erhalten eine kuratierte Liste von Abhängigkeiten je nach technischem Aspekt (Web, Batch, Datenbank) in kompatiblen Versionen. Somit entfällt viel manuelle Arbeit, insbesondere im Hinblick auf Sicherheitslücken.

Da Spring Boot die Erstellung von eigenständigen, produktionsreifen Anwendungen auf Basis von Spring stark vereinfacht, wird heutzutage die Mehrzahl der neuen Spring-Anwendungen konsequent auf Spring Boot aufgebaut.

Wer nutzt Spring und warum?

Ähnlich wie das Framework selbst hat sich auch Spring als Unternehmen in den letzten 18 Jahren stetig weiterentwickelt. Ursprünglich gegründet, um Spring und die damit verbundenen Projekte zu unterstützen und weiterzuentwickeln, wuchs das Unternehmen und das Entwicklerteam von Spring in den ersten Jahren stetig. Nach der Übernahme von Covalent im Jahr 2008 und weiteren Akquisitionen von G2One und Hyperic konnten wir unser Geschäft deutlich ausbauen.

Im Ergebnis konnten wir eine Suite von Softwareprodukten für alle drei Phasen des Lebenszyklus von Enterprise-Java-Anwendungen anbieten. Dies führte schon bald zur Übernahme durch VMware im Jahr 2009, wo wir zu einer eigenen Division innerhalb des Unternehmens wurden. Im Jahr 2013 gründete VMware das Joint Venture Pivotal Software und überführte Spring in diese neue Organisation – nur um im Jahr 2020 die Kräfte wieder zu bündeln, indem Pivotal und Spring in das neu geschaffene VMware Tanzu-Portfolio zurückgeführt wurden.

Das stetige Wachstum und die unternehmerische Unterstützung des Spring-Teams haben dazu beigetragen, dass sich Spring heute vor allem durch seine Zuverlässigkeit und Vielseitigkeit auszeichnet. Aus diesem Grund verwenden eine Vielzahl von Unternehmen Spring in ihren Tech-Stacks, darunter Accenture, Deleo Korea und Zalando. Netflix nutzt Spring Boot zum Beispiel als Basis seiner SOA, weil es die Skalierbarkeit und Reife der JVM bietet – aber auch Non-Profit-Organisationen oder Regierungen betreiben Softwareprojekte, die auf Spring Boot basieren. Alles in allem schätzen die Unternehmen und ihre IT-Teams, dass Spring zuverlässig sowie gut geplant ist und außerordentlich ausgeführt wird.

Was kommt als nächstes?

Was ich daran liebe, seit so vielen Jahren im Spring-Team zu sein, ist, dass es von Anfang an nie langweilig war. Auch jetzt haben wir viele neue Initiativen und Erweiterungen, um Spring noch besser zu machen. Seit Oktober 2020 ist Spring Framework 5.3 als „Long Term Support“-Zweig (und als Basis für Spring Boot 2.4 und weitere 2.x-Releases) allgemein verfügbar. Ein seltener und strategisch sehr relevanter Schritt – auch im Hinblick auf das lang erwartete Java 17 LTS Release im September 2021.

Dazu passt auch der für den 16. März geplante Support von Java 16 in Spring Framework 5.3.5. In der Java-Welt gilt JDK 16 als der letzte Meilenstein vor JDK 17 LTS – und wir erwarten, dass mittelfristig viele Spring Framework 5.3.x-Anwender strategisch auf JDK 17 umsteigen werden.

Darüber hinaus bereiten wir eine neue Spring „Framework 6“- und „Spring Boot 3“-Generation vor, von der die Entwickler-Community bereits im Jahr 2021 Preview-Releases sehen wird. Zu den Hauptthemen gehören ein Java-Baseline-Upgrade mit Fokus auf JDK 17, eine Migration von den traditionellen Java EE 7/8-APIs zu den Jakarta EE 9+-APIs und ein Support für Native Executables durch eine enge Anpassung an die nativen Konventionen von GraalVM.

Jürgen Höller
Jürgen Höller
(Bild: Susanne Sickinger)

Wir wollen auch veraltete Framework-Features konsequent beschneiden und Spring Framework 6 für neue Anwendungsumgebungen im Jahr 2022 und darüber hinaus entwerfen – Seite an Seite mit der LTS-Wartung von Spring Framework 5.3.x, die das gesamte Spring-Feature-Set für bestehende Anwendungen beibehält.

Das Spring Framework hat bereits eine lange Geschichte hinter sich, aber sie ist noch lange nicht zu Ende.

* Jürgen Höller ist Mitbegründer des Open-Source-Projekts Spring Framework und begleitet das Kernprojekt bereits seit 2003 als Projektleiter und Release-Manager. Aktuell ist er hauptberuflich als Senior Staff Engineer bei VMware tätig.

(ID:47159489)