11[[spring-whats-new]]
22= What's New in Spring Framework 4.x
33
4- This chapter provides an overview of the new features and improvements that have been introduced with Spring Framework 4.3. If you are interested in more details, please see the link:https://jira.spring.io/issues/?jql=project%20%3D%20SPR%20AND%20fixVersion%20in%20(%224.3%20RC1%22%2C%20%224.3%20RC2%22%2C%20%224.3%20GA%22)%20ORDER%20BY%20issuetype%20DESC&startIndex=50[Issue Tracker tickets] that were resolved as part of the 4.3 development process.
4+ This chapter provides an overview of the new features and improvements that have been
5+ introduced with Spring Framework 4.3. If you are interested in more details, please see the link:
6+ https://jira.spring.io/issues/?jql=project%20%3D%20SPR%20AND%20fixVersion%20in%20(%224.3%20RC1%22%2C%20%224.3%20RC2%22%2C%20%224.3%20GA%22)%20ORDER%20BY%20issuetype%20DESC&startIndex=50[Issue Tracker tickets]
7+ that were resolved as part of the 4.3 development process.
8+
9+
510
611
712[[new-in-4.0]]
813== New Features and Enhancements in Spring Framework 4.0
14+
915The Spring Framework was first released in 2004; since then there have been significant
1016major revisions: Spring 2.0 provided XML namespaces and AspectJ support; Spring 2.5
1117embraced annotation-driven configuration; Spring 3.0 introduced a strong Java 5+ foundation
@@ -22,6 +28,7 @@ is available on the {wiki-spring-framework}[Spring Framework GitHub Wiki].
2228
2329
2430=== Improved Getting Started Experience
31+
2532The new https://spring.io[spring.io] website provides a whole series of
2633https://spring.io/guides["Getting Started"] guides to help you learn Spring. You
2734can read more about the guides in the <<overview-getting-started-with-spring>> section
@@ -35,6 +42,7 @@ Framework release.
3542
3643
3744=== Removed Deprecated Packages and Methods
45+
3846All deprecated packages, and many deprecated classes and methods have been removed with
3947version 4.0. If you are upgrading from a previous release of Spring, you should ensure
4048that you have fixed any deprecated calls that you were making to outdated APIs.
@@ -53,6 +61,7 @@ retained for the time being where Spring 3.2 had it; now just in deprecated form
5361
5462
5563=== Java 8 (as well as 6 and 7)
64+
5665Spring Framework 4.0 provides support for several Java 8 features. You can make use of
5766__lambda expressions__ and __method references__ with Spring's callback interfaces. There
5867is first-class support for `java.time` (http://jcp.org/en/jsr/detail?id=310[JSR-310]),
@@ -65,9 +74,20 @@ Spring remains compatible with older versions of Java and the JDK: concretely, J
6574and above are still fully supported. However, for newly started development projects
6675based on Spring 4, we recommend the use of Java 7 or 8.
6776
77+ [NOTE]
78+ ====
79+ As of late 2017, JDK 6 is being phased out and therefore also Spring's JDK 6 support.
80+ Oracle as well as IBM will terminate all commercial support efforts for JDK 6 in 2018.
81+ While Spring will retain its JDK 6 runtime compatibility for the entire 4.3.x line,
82+ we require an upgrade to JDK 7 or higher for any further support beyond this point:
83+ in particular for JDK 6 specific bug fixes or other issues where an upgrade to JDK 7
84+ addresses the problem.
85+ ====
86+
6887
6988
7089=== Java EE 6 and 7
90+
7191Java EE version 6 or above is now considered the baseline for Spring Framework 4, with
7292the JPA 2.0 and Servlet 3.0 specifications being of particular relevance. In order to
7393remain compatible with Google App Engine and older application servers, it is possible
@@ -95,6 +115,7 @@ Spring Framework 4.0. The same applies to Hibernate Validator 5.0 as a Bean Vali
95115
96116
97117=== Groovy Bean Definition DSL
118+
98119Beginning with Spring Framework 4.0, it is possible to define external bean configuration
99120using a Groovy DSL. This is similar in concept to using XML bean definitions but allows
100121for a more concise syntax. Using Groovy also allows you to easily embed bean definitions
@@ -129,6 +150,7 @@ For more information consult the `GroovyBeanDefinitionReader`
129150
130151
131152=== Core Container Improvements
153+
132154There have been several general improvements to the core container:
133155
134156* Spring now treats <<beans-generics-as-qualifiers,__generic types__ as a form of
@@ -156,6 +178,7 @@ There have been several general improvements to the core container:
156178
157179
158180=== General Web Improvements
181+
159182Deployment to Servlet 2.5 servers remains an option, but Spring Framework 4.0 is now
160183focused primarily on Servlet 3.0+ environments. If you are using the
161184<<spring-mvc-test-framework,Spring MVC Test Framework>> you
@@ -175,6 +198,7 @@ have been made to Spring's Web modules:
175198
176199
177200=== WebSocket, SockJS, and STOMP Messaging
201+
178202A new `spring-websocket` module provides comprehensive support for WebSocket-based,
179203two-way communication between client and server in web applications. It is compatible with
180204http://jcp.org/en/jsr/detail?id=356[JSR-356], the Java WebSocket API, and in addition
@@ -196,6 +220,7 @@ For further details, including a more thorough introduction, see the <<websocket
196220
197221
198222=== Testing Improvements
223+
199224In addition to pruning of deprecated code within the `spring-test` module, Spring
200225Framework 4.0 introduces several new features for use in unit and integration testing.
201226
@@ -230,7 +255,10 @@ Version 4.1 included a number of improvements, as described in the following sec
230255* <<v4_1-WebSocket-Messaging-Improvements>>
231256* <<v4_1-Testing-Improvements>>
232257
258+
259+
233260=== JMS Improvements [[v4_1-JMS-Improvements]]
261+
234262Spring 4.1 introduces a much simpler infrastructure <<jms-annotated,to register JMS
235263listener endpoints>> by annotating bean methods with
236264{api-spring-framework}/jms/annotation/JmsListener.html[`@JmsListener`].
@@ -260,6 +288,8 @@ Finally, Spring 4.1 provides additional miscellaneous improvements:
260288 {api-spring-framework}/util/backoff/BackOff.html[`BackOff`] implementation
261289* JMS 2.0 shared consumers are supported
262290
291+
292+
263293=== Caching Improvements [[v4_1-Caching-Improvements]]
264294
265295Spring 4.1 supports <<cache-jsr-107,JCache (JSR-107) annotations>> using Spring's
@@ -280,6 +310,8 @@ Spring 4.1 also improves its own caching abstraction significantly:
280310Spring 4.1 also has a breaking change in the `Cache` interface as a new `putIfAbsent`
281311method has been added.
282312
313+
314+
283315=== Web Improvements [[v4_1-Web-Improvements]]
284316
285317* The existing support for resource handling based on the `ResourceHttpRequestHandler`
@@ -337,6 +369,8 @@ method has been added.
337369 support (based on Groovy 2.3). See the `GroovyMarkupConfigurer` and respecitve
338370 `ViewResolver` and `View' implementations.
339371
372+
373+
340374=== WebSocket Messaging Improvements [[v4_1-WebSocket-Messaging-Improvements]]
341375
342376* SockJS (Java) client-side support. See `SockJsClient` and classes in same package.
@@ -355,6 +389,8 @@ method has been added.
355389* Close STOMP/WebSocket connections that have no activity within 60 seconds after the
356390 WebSocket session is established. See https://jira.spring.io/browse/SPR-11884[SPR-11884].
357391
392+
393+
358394=== Testing Improvements [[v4_1-Testing-Improvements]]
359395
360396* Groovy scripts can now be used to configure the `ApplicationContext` loaded for
@@ -403,6 +439,8 @@ Version 4.2 included a number of improvements, as described in the following sec
403439* <<v4_2-WebSocket-Messaging-Improvements>>
404440* <<v4_2-Testing-Improvements>>
405441
442+
443+
406444=== Core Container Improvements [[v4_2-Core-Container-Improvements]]
407445
408446* Annotations such as `@Bean` get detected and processed on Java 8 default methods as well,
@@ -507,6 +545,8 @@ public @interface MyTestConfig {
507545 exposed through the `lang:std` element in XML. Supports e.g. JavaScript and JRuby.
508546 (Note: JRubyScriptFactory and `lang:jruby` are deprecated now, in favor of using JSR-223.)
509547
548+
549+
510550=== Data Access Improvements [[v4_2-Data-Access-Improvements]]
511551
512552* `javax.transaction.Transactional` is now supported via AspectJ.
@@ -517,6 +557,8 @@ public @interface MyTestConfig {
517557 `<jdbc:embedded-database>` supports a new `database-name` attribute.
518558 See "Testing Improvements" below for further details.
519559
560+
561+
520562=== JMS Improvements [[v4_2-JMS-Improvements]]
521563
522564* The `autoStartup` attribute can be controlled via `JmsListenerContainerFactory`.
@@ -526,6 +568,8 @@ public @interface MyTestConfig {
526568* `@JmsListener` is now a repeatable annotation to declare several JMS containers on the same
527569 method (use the newly introduced `@JmsListeners` if you're not using Java8 yet).
528570
571+
572+
529573=== Web Improvements [[v4_2-Web-Improvements]]
530574
531575* HTTP Streaming and Server-Sent Events support, see <<mvc-ann-async-http-streaming>>.
@@ -559,6 +603,8 @@ public @interface MyTestConfig {
559603* Introduced `ScriptTemplateView` as a JSR-223 based mechanism for scripted web views,
560604 with a focus on JavaScript view templating on Nashorn (JDK 8).
561605
606+
607+
562608=== WebSocket Messaging Improvements [[v4_2-WebSocket-Messaging-Improvements]]
563609
564610* Expose presence information about connected users and subscriptions:
@@ -575,6 +621,8 @@ public @interface MyTestConfig {
575621 `@MessageMapping` and `@SubscribeMapping` methods.
576622* `MarshallingMessageConverter` for XML payloads.
577623
624+
625+
578626=== Testing Improvements [[v4_2-Testing-Improvements]]
579627
580628* JUnit-based integration tests can now be executed with JUnit rules instead of the
@@ -650,6 +698,8 @@ Version 4.3 included a number of improvements, as described in the following sec
650698* <<v4_3-Testing-Improvements>>
651699* <<v4_3-Support-for-new-library-and-server-generations>>
652700
701+
702+
653703=== Core Container Improvements [[v4_3-Core-Container-Improvements]]
654704
655705* Core container exceptions provide richer metadata to evaluate programmatically.
@@ -670,11 +720,15 @@ Version 4.3 included a number of improvements, as described in the following sec
670720 custom _composed annotations_ with attribute overrides.
671721* `@Scheduled` is properly supported on beans of any scope.
672722
723+
724+
673725=== Data Access Improvements [[v4_3-Data-Access-Improvements]]
674726
675727* `jdbc:initialize-database` and `jdbc:embedded-database` support a configurable
676728 separator to be applied to each script.
677729
730+
731+
678732=== Caching Improvements [[v4_3-Caching-Improvements]]
679733
680734Spring 4.3 allows concurrent calls on a given key to be synchronized so that the
@@ -692,12 +746,16 @@ Spring 4.3 also improves the caching abstraction as follows:
692746* `@Cacheable`, `@CacheEvict`, `@CachePut`, and `@Caching` may now be used as
693747 _meta-annotations_ to create custom _composed annotations_ with attribute overrides.
694748
749+
750+
695751=== JMS Improvements [[v4_3-JMS-Improvements]]
696752
697753* `@SendTo` can now be specified at the class level to share a common reply destination.
698754* `@JmsListener` and `@JmsListeners` may now be used as _meta-annotations_ to create
699755 custom _composed annotations_ with attribute overrides.
700756
757+
758+
701759=== Web Improvements [[v4_3-Web-Improvements]]
702760
703761* Built-in support for <<mvc-ann-requestmapping-head-options,HTTP HEAD and HTTP OPTIONS>>.
@@ -721,10 +779,14 @@ Spring 4.3 also improves the caching abstraction as follows:
721779* `RestTemplate` and `AsyncRestTemplate` support strict URI variable encoding via `DefaultUriTemplateHandler`.
722780* `AsyncRestTemplate` supports request interception.
723781
782+
783+
724784=== WebSocket Messaging Improvements [[v4_3-WebSocket-Messaging-Improvements]]
725785
726786* `@SendTo` and `@SendToUser` can now be specified at class-level to share a common destination.
727787
788+
789+
728790=== Testing Improvements [[v4_3-Testing-Improvements]]
729791
730792* The JUnit support in the _Spring TestContext Framework_ now requires JUnit 4.12 or higher.
@@ -754,6 +816,8 @@ Spring 4.3 also improves the caching abstraction as follows:
754816 whether the order of declaration for expectations should be ignored (see <<spring-mvc-test-client>>).
755817* Client-side REST Test supports expectations for form data in the request body.
756818
819+
820+
757821=== Support for new library and server generations [[v4_3-Support-for-new-library-and-server-generations]]
758822
759823* Hibernate ORM 5.2 (still supporting 4.2/4.3 and 5.0/5.1 as well, with 3.6 deprecated now)
0 commit comments