Tutorial

Spring 5

Published on August 4, 2022
author

Pankaj

Spring 5

Spring 5 was released in late 2017. Spring 5 brings a massive update to the Spring framework. Spring 4 was released in 2013, so everybody was expecting a major overhaul of the framework. I am very happy to see the new features in Spring framework.

Spring 5 Features

Spring 5 features can be broadly divided into following categories:

  • Java Baseline Support
  • Core API Enhancements
  • Spring Web MVC Enhancements
  • Spring WebFlux
  • Functional Programming with Kotlin Support
  • Testing Improvements
  • Deprecated Support and Removed Packages

Java Baseline Support

  • Spring 5 runs on Java 8, so spring code can leverage lambda expressions to improve code readability.
  • Spring 5 also supports java 9, so we can create our applications on module based architecture too.
  • Spring 5 supports Java EE 7 and also compatible with Java EE 8. So we can use Servlet 4.0, Bean Validation 2.0, JPA 2.2 in our applications. We can also use their older versions i.e. Servlet 3.1, Bean Validation 1.1, JPA 2.1.
  • Spring 5 applications preferred server versions are Tomcat 8.5+, Jetty 9.4+ and WildFly 10+.

I really like that spring 5 is trying to catch up to the latest version of different technologies.

Core API Enhancements

  • Non-null API declaration at the package level. Nullable arguments, fields and return values are explicitly annotated with @Nullable annotation.
  • File operations are performed via NIO 2 streams i.e. no FileInput/Output Stream. This is a great enhancement and performance boost for file based applications.
  • Spring Framework 5.0 comes with its own Commons Logging bridge; spring-jcl instead of standard Commons Logging.
  • Support for providing spring components information through index file “META-INF/spring.components” rather than classpath scanning. This will improve startup time a lot if you have a large spring project and many spring components. It will be better for developers too, because we can directly look into specified files to figure out the application entry point rather than searching through the entire classpath files.

Spring Web MVC Enhancements

Spring MVC module has got the major overhaul in terms of using the latest Java EE technologies. Some of the major enhancements are:

  • Full Servlet 3.1 signature support in Spring-provided Filter implementations.
  • Support for Servlet 4.0 PushBuilder argument in Spring MVC controller methods.
  • MaxUploadSizeExceededException for Servlet 3.0 multipart parsing on common servers.
  • Unified support for common media types through MediaTypeFactory delegate.
  • Data binding with immutable objects using Kotlin, Lombok, @ConstructorProperties.
  • Support for the JSON Binding API as an alternative to Jackson and GSON.
  • Support for Reactor 3.1 Flux and Mono as well as RxJava 1.3 and 2.1 as return values from Spring MVC controller methods.
  • Support for ResponseStatusException as a programmatic alternative to @ResponseStatus.

Spring WebFlux

Spring WebFlux is the new module, it’s an alternative to spring-webmvc module and built on reactive framework. This module is used to create fully asynchronous and non-blocking application built on event-loop execution model.

  • Reactive infrastructure in spring-core such as Encoder and Decoder for encoding and decoding streams of Objects.
  • @Controller style, annotation-based, programming model, similar to Spring MVC, but supported in WebFlux, running on a reactive stack.
  • New WebClient with a functional and reactive API for HTTP calls, comparable to the RestTemplate but through a fluent API and also excelling in non-blocking and streaming scenarios based on WebFlux infrastructure.

Functional Programming with Kotlin Support

Spring 5 also supports Kotlin programming now. This is a huge step towards supporting functional programming, just as Java is also moving towards functional programming.

  • Support for Null-Safe API
  • Support for Kotlin immutable classes with optional parameters and default values.
  • Leveraging Kotlin reified type parameters to avoid specifying explicitly the Class to use for serialization/deserialization in various APIs like RestTemplate or WebFlux APIs.
  • Support for Kotlin autowired constructor with optional parameters.
  • Kotlin null-safety support for @Autowired/@Inject and @RequestParam/@RequestHeader/etc annotations.

Testing Improvements

  • Support for JUnit 5
  • Support for parallel test execution in the Spring TestContext Framework

Deprecated Support and Removed Packages

  • Removed packages beans.factory.access, jdbc.support.nativejdbc, mock.staticmock from spring-aspects module.
  • Removed packages web.view.tiles2 and orm.hibernate3/hibernate4 dropped. This means if you are planning to use Spring 5, you will also have to use Hibernate 5.
  • Dropped support for old technologies Portlet, Velocity, JasperReports, XMLBeans, JDO, Guava. If you are using any of these, then either migrate to some other technologies or stay with Spring 4.

That’s all for a quick overview of Spring 5 features. Reference: Spring GitHub Doc

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar
Pankaj

author

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
JournalDev
DigitalOcean Employee
DigitalOcean Employee badge
November 10, 2018

I’m disappointed that support for JDO has been dropped. It always seemed to me to be the best persistence technology, and the companies I work for have used JDO widely in production, and are currently shipping and planning new products with use JDO persistence.

- Steve Zara

    JournalDev
    DigitalOcean Employee
    DigitalOcean Employee badge
    July 10, 2018

    Good to know and thanks for the info.

    - Chiranjeevi

      Try DigitalOcean for free

      Click below to sign up and get $200 of credit to try our products over 60 days!

      Sign up

      Join the Tech Talk
      Success! Thank you! Please check your email for further details.

      Please complete your information!

      Become a contributor for community

      Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

      DigitalOcean Documentation

      Full documentation for every DigitalOcean product.

      Resources for startups and SMBs

      The Wave has everything you need to know about building a business, from raising funding to marketing your product.

      Get our newsletter

      Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

      New accounts only. By submitting your email you agree to our Privacy Policy

      The developer cloud

      Scale up as you grow — whether you're running one virtual machine or ten thousand.

      Get started for free

      Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

      *This promotional offer applies to new accounts only.