On this page
6. New Features and Enhancements in Spring Framework 4.3
Version 4.3 included a number of improvements, as described in the following sections:
- Section 6.1, “Core Container Improvements”
- Section 6.2, “Data Access Improvements”
- Section 6.3, “Caching Improvements”
- Section 6.4, “JMS Improvements”
- Section 6.5, “Web Improvements”
- Section 6.6, “WebSocket Messaging Improvements”
- Section 6.7, “Testing Improvements”
- Section 6.8, “Support for new library and server generations”
- Core container exceptions provide richer metadata to evaluate programmatically.
- Java 8 default methods get detected as bean property getters/setters.
- Lazy candidate beans are not being created in case of injecting a primary bean.
- It is no longer necessary to specify the
@Autowired
annotation if the target bean only defines one constructor. @Configuration
classes support constructor injection.- Any SpEL expression used to specify the
condition
of an@EventListener
can now refer to beans (e.g.@beanName.method()
). - Composed annotations can now override array attributes in meta-annotations with a single element of the component type of the array. For example, the
String[] path
attribute of@RequestMapping
can be overridden withString path
in a composed annotation. @PersistenceContext
/@PersistenceUnit
selects a primaryEntityManagerFactory
bean if declared as such.@Scheduled
and@Schedules
may now be used as meta-annotations to create custom composed annotations with attribute overrides.@Scheduled
is properly supported on beans of any scope.
jdbc:initialize-database
andjdbc:embedded-database
support a configurable separator to be applied to each script.
Spring 4.3 allows concurrent calls on a given key to be synchronized so that the value is only computed once. This is an opt-in feature that should be enabled via the new sync
attribute on @Cacheable
. This features introduces a breaking change in the Cache
interface as a get(Object key, Callable<T> valueLoader)
method has been added.
Spring 4.3 also improves the caching abstraction as follows:
- SpEL expressions in caches-related annotations can now refer to beans (i.e.
@beanName.method()
). ConcurrentMapCacheManager
andConcurrentMapCache
now support the serialization of cache entries via a newstoreByValue
attribute.@Cacheable
,@CacheEvict
,@CachePut
, and@Caching
may now be used as meta-annotations to create custom composed annotations with attribute overrides.
@SendTo
can now be specified at the class level to share a common reply destination.@JmsListener
and@JmsListeners
may now be used as meta-annotations to create custom composed annotations with attribute overrides.
- Built-in support for HTTP HEAD and HTTP OPTIONS.
New
@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
, and@PatchMapping
composed annotations for@RequestMapping
.- See Composed @RequestMapping Variants for details.
New
@RequestScope
,@SessionScope
, and@ApplicationScope
composed annotations for web scopes.- See Request scope, Session scope, and Application scope for details.
- New
@RestControllerAdvice
annotation with combined@ControllerAdvice
with@ResponseBody
semantics. @ResponseStatus
is now supported at the class level and inherited by all methods.- New
@SessionAttribute
annotation for access to session attributes (see example). - New
@RequestAttribute
annotation for access to request attributes (see example). @ModelAttribute
allows preventing data binding viabinding=false
attribute (see reference).@PathVariable
may be declared as optional (for use on@ModelAttribute
methods).- Consistent exposure of Errors and custom Throwables to MVC exception handlers.
- Consistent charset handling in HTTP message converters, including a UTF-8 default for multipart text content.
- Static resource handling uses the configured
ContentNegotiationManager
for media type determination. RestTemplate
andAsyncRestTemplate
support strict URI variable encoding viaDefaultUriTemplateHandler
.AsyncRestTemplate
supports request interception.
@SendTo
and@SendToUser
can now be specified at class-level to share a common destination.
- The JUnit support in the Spring TestContext Framework now requires JUnit 4.12 or higher.
- New
SpringRunner
alias for theSpringJUnit4ClassRunner
. - Test related annotations may now be declared on interfaces — for example, for use with test interfaces that make use of Java 8 based interface default methods.
- An empty declaration of
@ContextConfiguration
can now be completely omitted if default XML files, Groovy scripts, or@Configuration
classes are detected. @Transactional
test methods are no longer required to bepublic
(e.g., in TestNG and JUnit 5).@BeforeTransaction
and@AfterTransaction
methods are no longer required to bepublic
and may now be declared on Java 8 based interface default methods.- The
ApplicationContext
cache in the Spring TestContext Framework is now bounded with a default maximum size of 32 and a least recently used eviction policy. The maximum size can be configured by setting a JVM system property or Spring property calledspring.test.context.cache.maxSize
. - New
ContextCustomizer
API for customizing a testApplicationContext
after bean definitions have been loaded into the context but before the context has been refreshed. Customizers can be registered globally by third parties, foregoing the need to implement a customContextLoader
. @Sql
and@SqlGroup
may now be used as meta-annotations to create custom composed annotations with attribute overrides.ReflectionTestUtils
now automatically unwraps proxies when setting or getting a field.- Server-side Spring MVC Test supports expectations on response headers with multiple values.
- Server-side Spring MVC Test parses form data request content and populates request parameters.
- Server-side Spring MVC Test supports mock-like assertions for invoked handler methods.
- Client-side REST test support allows indicating how many times a request is expected and whether the order of declaration for expectations should be ignored (see Section 15.6.3, “Client-Side REST Tests”).
- Client-side REST Test supports expectations for form data in the request body.
- Hibernate ORM 5.2 (still supporting 4.2/4.3 and 5.0/5.1 as well, with 3.6 deprecated now)
- Hibernate Validator 5.3 (minimum remains at 4.3)
- Jackson 2.8 (minimum raised to Jackson 2.6+ as of Spring 4.3)
- OkHttp 3.x (still supporting OkHttp 2.x side by side)
- Tomcat 8.5 as well as 9.0 milestones
- Netty 4.1
- Undertow 1.4
- WildFly 10.1
Furthermore, Spring Framework 4.3 embeds the updated ASM 5.1, CGLIB 3.2.4, and Objenesis 2.4 in spring-core.jar
.