Java: Spring Framework 5.0 mit JDK-9-UnterstĂĽtzung freigegeben
Die aktuelle Version des Frameworks für professionelle Java-Entwickler wartet mit JDK-9-Kompatibilität auf und stellt darüber hinaus beispielsweise eine reaktive Alternative zum Webentwicklungsmodul spring-webmvc bereit.
- Julia Schmidt
Wie im Juli angekündigt, hat Pivotal Software nun offiziell Version 5.0 des Spring Frameworks freigegeben. Das Projekt ist schon seit Längerem Feature Complete, also mit allen für das Release nötigen Änderungen versehen, das Team wollte sich wohl allerdings mit der Veröffentlichung an anderen wichtigen Projekten der Java-Welt wie JUnit orientieren, außerdem erfolgte auch die finale Freigabe von Java 9 erst im September. Das Spring Framework soll Entwicklern Hilfestellungen beim strukturierten Umsetzen von Unternehmensanwendungen geben. Es ist unter anderem mit Features zur Dependency Injection, zur Transaktionsverwaltung sowie Support für Java Database Connectivity, die Persistence API und den Message Service ausgestattet.
Eine der zentralen Neuerungen ist die Kompatibilität zu Version 9 des Java Development Kit (JDK), was Entwicklung und Deployment angeht. So wurden in JDK 9 als veraltet markierte Programmierschnittstellen soweit möglich vermieden, Instantiierungen passieren durchgängig mit Konstruktoren und Reflexion gegen JDK-Klassen findet nur sparsam statt. Zwar läuft das Framework standardmäßig auf JDK 8, die Buildphase und auch die Testsuite kommen allerdings auch beim Einsatz von JDK 9 zu einem Ergebnis. Grundlegend soll der Framework-Code nun durch das Verwenden von Java 8 besser lesbar sein und die entsprechenden Features der Version der Programmiersprache besser unterstützen. Außerdem ist das Framework mit einer eigenen Commons Logging Bridge ausgestattet, sodass spring-jcl statt des standardmäßigen Commons Logging zum Einsatz kommt und sich Log4j 2.x, SLF4J und java.util.logging ohne zusätzliche Brücken erkennen lassen.
Testen und Erweiterungen zur Webentwicklung
Im Core Container lassen sich nach dem Update beispielsweise @Nullable-Annotationen als Indikatoren für optionale Injektions-Punkte verwenden und er kann mit dem Candidate Component Index als Alternative zum Scannen des Klassenpfads umgehen. Da man die Veröffentlichung von JUnit 5 abgewartet hat, kann Spring auch mit Support für die damit eingeführten Jupiter Programmier- und Erweiterungsmodelle im Spring TestContext Framework aufwarten. Dort lassen sich Tests nun zudem parallel ausführen, und es stehen die ergänzenden Test Execution Callbacks before und after zur Verfügung. Weitere Neuerungen was das Testen angeht, lassen sich beispielsweise im Wiki des GitHub-Projekts nachlesen.
Außer dem Framework hat auch die Erweiterung zum Erstellen von Webanwendungen Spring Web MVC einige Änderungen erfahren, und mit dem Modul spring-webflux steht eine auf reaktiven Prinzipien gebaute Alternative dazu zur Verfügung. Unter anderem gibt es in spring-webmvc nun ParsingPathMatcher, der beim Parsen mehr Effizienz als AntPathMatcher an den Tag legen soll und über eine erweiterte Syntax verfügt. Außerdem ist dort nun Support für die JSON Binding API eingebaut, @ExceptionHandler-Methoden ermöglichen den Einsatz von RedirectAttributes-Argumenten und ResponseStatusException ist als programmatische Alternative zu @ResponseStatus anerkannt.
Java 2017
Mehr Informationen zum Spring Framework sowie zu Java 9, Java EE 8 und aktuellen Entwicklungen im Java-Umfeld gibt es in dem iX-Developer-Sonderheft, das unter anderem im heise Shop erhältlich ist.
Das WebFlux-Modul arbeitet asynchron, blockiert nicht und ist für den Einsatz im Event-Loop Execution Model gedacht. Es greift auf reaktiven Infrastrukturen in spring-core und spring-web zurück und ist mit einem funktionalen Programmiermodell als Alternative zu @Controller ausgestattet, das bewusst minimal gehalten ist, auf dem selben reaktiven Stack läuft und über eine Endpunkt-Routing-API verfügt. Zur Erweiterung gehört auch ein neuer WebClient mit funktionalen und reaktiven APIs für HTTP-Calls, der sich mit RestTemplate vergleichen lässt, aber etwa bei Streaming-Aufgaben besser abschneiden soll. (jul)