Spring Framework Timeline
Paulose Raj
JAVA 11 | SPRING BOOT | REACTJS | MICROSERVICES | KUBERNETES | KAFKA | ARGO CD
Spring 0.9: This is the first public release of the framework, based on the book "Expert One-on-One: J2EE Design and Development", that offered a bean configuration foundation, AOP support, a JDBC abstraction framework, abstract transaction support, and so on. This version does not have official reference documentation.
Spring 1.x: This is the first version released with official reference documentation. It is composed of the seven modules
- Spring Core: Bean container and supporting utilities
- Spring Context: ApplicationContext, UI, validation, JNDI, Enterprise JavaBeans (EJB), remoting, and mail support
- Spring DAO: Transaction infrastructure, Java Database Connectivity (JDBC), and data access object (DAO) support
- Spring ORM: Hibernate, iBATIS, and Java Data Objects (JDO) support
- Spring AOP: An AOP Alliance–compliant aspect-oriented programming (AOP) implementation
- Spring Web: Basic integration features such as multipart functionality, context initialization through servlet listeners, and a web-oriented application context
- Spring Web MVC: Web-based Model-View-Controller (MVC) framework
Spring 2.x: This is composed of six modules. The Spring Context module is now included in Spring Core, and all Spring web components have been represented here by a single item.
–– Easier XML configuration through the use of the new XML Schema-based configuration rather than the DTD format. Notable areas of improvement include bean definitions, AOP, and declarative transactions.
–– New bean scopes for web and portal usage (request, session, and global sessions).
–– @AspectJ annotation support for AOP development.
–– Java Persistence API (JPA) abstraction layer.
–– Full support for asynchronous JMS message-driven POJOs (for plain old Java objects).
–– JDBC simplifications including SimpleJdbcTemplate when using Java 5+.
–– JDBC named parameter support (NamedParameterJdbcTemplate).
–– Form tag library for Spring MVC.
–– Introduction of the Portlet MVC framework.
–– Dynamic language support. Beans can be written in JRuby, Groovy, and BeanShell.
–– Notification support and controllable MBean registration in JMX.
–– TaskExecutor abstraction introduced for scheduling tasks.
–– Java 5 annotation support, specifically for @Transactional, @Required, and @AspectJ.
? Spring 2.5.x: This version has the following features:
–– A new configuration annotation called @Autowired and support for JSR-250 annotations (@Resource, @PostConstruct, @PreDestroy)
–– New stereotype annotations: @Component, @Repository, @Service, @Controller
–– Automatic classpath-scanning support to detect and wire classes annotated with stereotype annotations
–– AOP updates, including a new bean pointcut element and AspectJ load-time weaving
–– Full WebSphere transaction management support
–– In addition to the Spring MVC @Controller annotation, @RequestMapping, @RequestParam, and @ModelAttribute annotations added to support request handling through annotation configuration
–– Tiles 2 support
–– JSF 1.2 support
–– JAX-WS 2.0/2.1 support
–– Introduction of the Spring TestContext Framework, providing annotation-driven and integration testing support, agnostic of the testing framework being used
–– Ability to deploy a Spring application context as a JCA adapter
? Spring 3.0.x: This is the first version of Spring based on Java 5 and is designed to take full advantage of Java 5 features such as generics, varargs, and other language improvements. This version introduces the Java-based @Configuration model. The framework modules have been revised to be managed separately with one source tree per module JAR.
–– Support for Java 5 features such as generics, varargs, and other improvements
–– First-class support for Callables, Futures, ExecutorService adapters, and ThreadFactory integration
–– Framework modules now managed separately with one source tree per module JAR
–– Introduction of the Spring Expression Language (SpEL)
–– Integration of core Java Config features and annotations
–– General-purpose type conversion system and field-formatting system
–– Comprehensive REST support
–– New MVC XML namespace and additional annotations such as @CookieValue and @RequestHeaders for Spring MVC
–– Validation enhancements and JSR-303 (Bean Validation) support
–– Early support for Java EE 6, including @Async/@Asynchronous annotation, JSR-303, JSF 2.0, JPA 2.0, and so on
–– Support for embedded databases such as HSQL, H2, and Derby
? Spring 3.1.x: This version has the following features:
–– New cache abstraction
–– Bean definition profiles can be defined in XML as well as support for the @Profile annotation
–– Environment abstraction for unified property management
–– Annotation equivalents for common Spring XML namespace elements such as @ComponentScan, @EnableTransactionManagement, @EnableCaching, @EnableWebMvc, @EnableScheduling, @EnableAsync, @EnableAspectJAutoProxy, @EnableLoadTimeWeaving, and @EnableSpringConfigured
–– Support for Hibernate 4
–– Spring TestContext Framework support for @Configuration classes and bean definition profiles
–– c: namespace for simplified constructor injection
–– Support for Servlet 3 code-based configuration of the Servlet container
–– Ability to bootstrap the JPA EntityManagerFactory without persistence.xml
–– Flash and RedirectAttributes added to Spring MVC, allowing attributes to survive a redirect by using the HTTP session
–– URI template variable enhancements
–– Ability to annotate Spring MVC @RequestBody controller method arguments with @Valid
–– Ability to annotate Spring MVC controller method arguments with the @RequestPart annotation
? Spring 3.2.x: This version has the following features:
–– Support for Servlet 3–based asynchronous request processing.
–– New Spring MVC test framework.
–– New Spring MVC annotations @ControllerAdvice and @MatrixVariable.
–– Support for generic types in RestTemplate and in @RequestBody arguments.
–– Jackson JSON 2 support.
–– Support for Tiles 3.
–– @RequestBody or an @RequestPart argument can now be followed by an Errors argument, making it possible to handle validation errors.
–– Ability to exclude URL patterns by using the MVC namespace and Java Config configuration options.
–– Support for @DateTimeFormat without Joda Time.
–– Global date and time formatting.
–– Concurrency refinements across the framework, minimizing locks and generally improving concurrent creation of scoped/prototyped beans
–– New Gradle-based build system.
–– Migration to GitHub (https://github.com/SpringSource/spring-framework).
–– Refined Java SE 7/OpenJDK 7 support in the framework and third-party dependencies. CGLIB and ASM are now included as part of Spring. AspectJ 1.7 is supported in addition to 1.6.
? Spring 4.0.x: This is a major Spring release and the first to fully support Java 8. Older versions of Java can be used, but the minimum requirement has been raised to Java SE6. Deprecated classes and methods were removed, and the module organization is pretty much the same
–– Improved getting-started experience via a series of Getting Started guides on the new www.spring.io/guides web site
–– Removal of deprecated packages and methods from the prior Spring 3 version
–– Java 8 support, raising the minimum Java version to 6 update 18
–– Java EE 6 and above is now considered the baseline for Spring Framework 4.0
–– Groovy bean definition DSL, allowing bean definitions to be configured via Groovy syntax
–– Core container, testing, and general web improvements
–– WebSocket, SockJS, and STOMP messaging
? Spring 4.2.x: This version has the following features:
–– Core improvements (eg., introduction of @AliasFor and modification of existing annotation to make use of it)
–– Full support for Hibernate ORM 5.0
–– JMS and web improvements
–– WebSocket messaging improvements
–– Testing improvements, most notably the introduction of @Commit to replace @Rollback(false) and the introduction of the AopTestUtils utility class that allows access to the underlying object hidden behind a Spring proxy
? Spring 4.3.x: This version has the following features:
–– The programming model has been refined.
–– Considerable improvements in the core container (inclusions of ASM 5.1, CGLIB 3.2.4, and Objenesis 2.4 in spring-core.jar) and MVC.
–– Composed annotations were added.
–– Spring TestContext Framework requires JUnit 4.12 or higher.
–– Support for new libraries, including Hibernate ORM 5.2, Hibernate Validator 5.3, Tomcat 8.5 and 9.0, Jackson 2.8, and so on
? Spring 5.0.x: This is a major release. The entire framework codebase is based on Java 8 and is fully compatible with Java 9 as of July 2016.2
–– Support was dropped for Portlet, Velocity, JasperReports, XMLBeans, JDO, Guava, Tiles2, and Hibernate3.
–– XML configuration namespaces are now streamed to unversioned schemas; version-specific declarations are still supported but validated against the latest XSD schema.
–– Overall improvements were introduced by harnessing the full power of Java 8 features.
–– The Resource abstraction provides isFile indicator for defensive getFile access.
–– Full Servlet 3.1 signature support in Spring-provided Filter implementations.
–– Support for Protobuf 3.0.
–– Support for JMS 2.0+, JPA 2.1+.
–– Introduction of Spring Web Flow, a project that is an alternative to Spring MVC built on a reactive foundation, which means that it is fully asynchronous and non-blocking, intended for use in an event-loop execution model vs. traditional large thread pool with a thread-per-request execution model (built upon Project Reactor3).
–– The web and core modules were adapted to the reactive programming model.4
–– There are a lot of improvements in the Spring test module. JUnit 5 is now supported, and new annotations were introduced to support the Jupiter programming and extension model such as @SpringJUnitConfig, @SpringJUnitWebConfig, @EnabledIf, @DisabledIf.
–– Support for parallel test execution in the Spring TestContext Framework.