The next Spring Framework releases are scheduled for August 17th with the last 6.1.0 milestone. On September 14th we are expecting a new 6.0.x maintenance release and the first release candidate for 6.1.0.
The first version was written by Rod Johnson, who released the framework with the publication of his book Expert One-on-One J2EE Design and Development in October 2002. The framework was first released under the Apache 2.0 license in June 2003. The first production release, 1.0, was released in March 2004.[6] The Spring 1.2.6 framework won a Jolt productivity award and a JAX Innovation Award in 2006.[7][8] Spring 2.0 was released in October 2006, Spring 2.5 in November 2007, Spring 3.0 in December 2009, Spring 3.1 in December 2011, and Spring 3.2.5 in November 2013.[9] Spring Framework 4.0 was released in December 2013.[10] Notable improvements in Spring 4.0 included support for Java SE (Standard Edition) 8, Groovy 2,[11][12] some aspects of Java EE 7, and WebSocket.[13]
Spring Framework 4.2.0 was released on 31 July 2015 and was immediately upgraded to version 4.2.1, which was released on 01 Sept 2015.[15] It is "compatible with Java 6, 7 and 8, with a focus on core refinements and modern web capabilities".[16]
Spring Framework 4.3 has been released on 10 June 2016 and was supported until 2020.[17] It was announced to "be the final generation within the general Spring 4 system requirements (Java 6+, Servlet 2.5+), [...]".[16]
Spring Framework 6.0 has been released on 16 November 2022 and came with a Java 17+ baseline and a move to Jakarta EE 9+ (in the jakarta namespace), with a focus on the recently released Jakarta EE 10 APIs such as Servlet 6.0 and JPA 3.1.[19]
The Spring framework has a feature known as autowiring, which uses the spring container to automatically satisfy the dependencies specified in the JavaBean properties to objects of the appropriate type in the current factory. [58] This can only occur if there is only one object with the appropriate type.[58]
The Spring Framework has its own Aspect-oriented programming (AOP) framework that modularizes cross-cutting concerns in aspects.[62] The motivation for creating a separate AOP framework is to provide basic AOP features without too much complexity in either design, implementation, or configuration. The Spring AOP framework takes full advantage of the Spring container.
The Spring AOP framework is proxy pattern-based.[63][25] It is configured at run time.[citation needed] This removes the need for a compilation step or load-time weaving.[citation needed] On the other hand, interception only allows for public method-execution on existing objects at a join point.[citation needed]
Compared to the AspectJ framework, Spring AOP is less powerful, but also less complicated.[citation needed] Spring 1.2 includes support to configure AspectJ aspects in the container. Spring 2.0 added more integration with AspectJ; for example, the pointcut language is reused and can be mixed with Spring AOP-based aspects.[citation needed] Further, Spring 2.0 added a Spring Aspects library that uses AspectJ to offer common Spring features such as declarative transaction management[63] and dependency injection via AspectJ compile-time or load-time weaving.[64] SpringSource uses AspectJ AOP in other Spring projects such as Spring Roo and Spring Insight, with Spring Security offering an AspectJ-based aspect library.[citation needed]
The Spring team decided not to introduce new AOP-related terminology. Therefore, in the Spring reference documentation and API, terms such as aspect, join point, advice, pointcut, introduction, target object (advised object), AOP proxy, and weaving all have the same meanings[citation needed] as in most other AOP frameworks (particularly AspectJ).
All these features become available when using template classes provided by Spring for each supported framework.[68] Critics have said these template classes are intrusive and offer no advantage over using (for example) the Hibernate API directly.[69][failed verification] In response, the Spring developers have made it possible to use the Hibernate and JPA APIs directly. This however requires transparent transaction management, as application code no longer assumes the responsibility to obtain and close database resources,[70] and does not support exception translation.[71]
Together with Spring's transaction management, its data access framework offers a flexible abstraction for working with data access frameworks. The Spring Framework doesn't offer a common data access API; instead, the full power of the supported APIs is kept intact.[citation needed] The Spring Framework is the only framework available in Java that offers managed data access environments outside of an application server or container.[72][better source needed]
Spring's Remote Access framework is an abstraction for working with various RPC (remote procedure call)-based technologies available on the Java platform both for client connectivity and marshalling objects on servers.[97] The most important feature offered by this framework is to ease configuration and usage of these technologies as much as possible by combining inversion of control and AOP.
Spring Roo is a community project which provides an alternative, code-generation based approach at using convention-over-configuration to rapidly build applications in Java. It currently supports Spring Framework, Spring Security and Spring Web Flow. Roo differs from other rapid application development frameworks by focusing on:
Spring WebFlux is a framework following the functional programming paradigm, designed for building reactive Spring applications. This framework uses functional programming and Reactive Streams extensively. A good use case for Spring WebFlux is for applications that require sending and receiving instantaneous information, such as a web application with chatting capabilities.[126]
For Spring 3 there isn't one. You only get the distro while dependencies are managed in Maven repository and retrieved with Ivy. That was the decision springsource fellows took. Which brings me to my problem.
P.S. I must mention that I can't just download something home and bring everything on a stick which is the first suggestion that pops in mind. Other rules apply for this :D, so I need an official release to download.
NOTE : You can download any release of spring framwork just by modifying the release version to 3.0.1 or 3.2.5(any other versions according to your need)in the above mentioned URL
Create a project at home, add what you need in spring 3 to that, open the project with eclipse+m2eclipse and view the dependency hierarchy. That will then tell you what you need as dependencies on spring.
The core (dependency injection, transaction management etc.) always stays the same or gets extended. Spring, however, goes with time and offers support for newer Java language versions, test framework enhancements, Websockets, reactive programming, etc.
Spring Framework 5 enables applications to embrace this asynchronous programming model with a web framework that is itself fully asynchronous in its own core contracts, uses non-blocking I/O internally, and supports Reactive Streams backpressure on top of async runtimes such as Netty and Undertow and also Servlet containers such as Tomcat and Jetty (based on Servlet 3.1 non-blocking I/O). The benefit of this approach is first-class support for composing asynchronous logic coupled with an event-loop style execution model that can handle more concurrency with less hardware resources, in particular under high load.
According to Stoyanchev, Spring 5.0 aims to provide a choice and consistency across Spring MVC and Spring WebFlux as much as possible. Both web frameworks support the same annotation-based programming model with flexible controller method signatures. In addition to this, Spring WebFlux also offers an alternative, functional web endpoint programming model that can be appealing with Java 8 lambdas and built-in Kotlin extensions.
Hoeller: Our Java 8+ baseline brings significant API refinements and many internal optimizations across the framework. At the same time, Spring Framework 5.0 ships with comprehensive JDK 9 support on the classpath as well as the module path already.
This is an evolving incident. Our team is continuing to investigate and validate additional information about this vulnerability and its impact. As of March 31, 2022, Spring has confirmed the zero-day vulnerability and has released Spring Framework versions 5.3.18 and 5.2.20 to address it. The vulnerability affects SpringMVC and Spring WebFlux applications running on JDK 9+. CVE-2022-22965 was assigned to track the vulnerability on March 31, 2022.
The authenticated check (vulnerability ID spring-cve-2022-22965) will run on Unix-like systems and report on vulnerable versions of Spring Framework found within WAR files. Please note: The unzip utility is required to be installed on systems being scanned. The authenticated check is available immediately for Nexpose and InsightVM Scan Engines.
The remote check (vulnerability ID spring-cve-2022-22965-remote-http) triggers against any discovered HTTP(S) services and attempts to send a payload to common Spring-based web application paths in order to trigger an HTTP 500 response, which indicates a higher probability that the system is exploitable. We also have an authenticated Windows check available as of the April 7th content release, which requires the April 6th product release (version 6.6.135). More information on how to scan for Spring4Shell with InsightVM and Nexpose is available here.
InsightAppSec customers can scan for Spring4Shell with the updated Remote Code Execution (RCE) attack module released April 1, 2022. For guidance on securing applications against Spring4Shell, read our blog here.
df19127ead