forked from spring-projects/spring-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
What's New in Spring Framework 6.x
Sam Brannen edited this page Jun 15, 2023
·
157 revisions
- Configuration options for virtual threads on JDK 21: a dedicated VirtualThreadTaskExecutor and a flag on SimpleAsyncTaskExecutor (also see the related GitHub issue about general compatibility with virtual threads)
- Lifecycle integration with Project CRaC for JVM checkpoint restore (see related documentation).
- Support for resolving JDK 21
SequencedCollection/Set/Mapat injection points, see 30239. - Revised
InstantandDurationparsing (aligned with Spring Boot), see 22013. - Support for letters other an A-Z in property, field, and variable names in SpEL expressions, see 30580.
- Support for registering a
MethodHandleas a SpEL function (see related documentation). - Async/reactive destroy methods (e.g. on R2DBC
ConnectionFactory), see 26691. - Reactive
@Scheduledmethods (including Kotlin coroutines), see 22924. -
Validatorfactory methods for programmatic validator implementations, see 29890. -
MethodValidationInterceptorthrowsMethodValidationExceptionsubclass ofConstraintViolationExceptionwith violations adapted toMessageSourceresolvable codes, and toErrorsinstances for@Validarguments with cascaded violations. See 29825, and umbrella issue 30645.
- Failed
CompletableFuturetriggers rollback for async transactional method, see 30018. -
BeanPropertyRowMapperandDataClassRowMapperavailable for R2DBC as well, see 30530.
- Spring MVC and WebFlux now have built-in method validation support for controller method parameters with
@Constraintannotations. That means you no longer need@Validatedat the controller class level to enable method validation via AOP proxy. Built-in method validation is layered on top of the existing argument validation for model attribute and request body arguments. The two are more tightly integrated and coordinated, e.g. avoiding cases with double validation. See Upgrading to 6.1 for migration details, 29825 for more on the built-in support in M1, and the umbrella issue 30645 for related tasks and feedback. -
ErrorResponse allows customization of
ProblemDetailtype viaMessageSourceand use of customProblemDetailthrough its builder. - Jetty-based
ClientHttpRequestFactoryfor use with RestTemplate, see 30564. - Improved buffering in various
ClientHttpRequestFactoryimplementations, see 30557.
- Entire framework codebase based on Java 17 source code level now.
- Migration from
javaxtojakartanamespace for Servlet, JPA, etc. - Runtime compatibility with Jakarta EE 9 as well as Jakarta EE 10 APIs.
- Compatible with latest web servers: Tomcat 10.1, Jetty 11, Undertow 2.3.
- Early compatibility with virtual threads (in preview as of JDK 19).
- Upgrade to ASM 9.4 and Kotlin 1.7.
- Complete CGLIB fork with support for capturing CGLIB-generated classes.
- Comprehensive foundation for Ahead-Of-Time transformations.
- First-class support for GraalVM native images (see related Spring Boot 3 blog post).
- Basic bean property determination without
java.beans.Introspectorby default. - AOT processing support in
GenericApplicationContext(refreshForAotProcessing). - Bean definition transformation based on pre-resolved constructors and factory methods.
- Support for early proxy class determination for AOP proxies and configuration classes.
-
PathMatchingResourcePatternResolveruses NIO and module path APIs for scanning, enabling support for classpath scanning within a GraalVM native image and within the Java module path, respectively. -
DefaultFormattingConversionServicesupports ISO-based defaultjava.timetype parsing.
- Support for predetermining JPA managed types (for inclusion in AOT processing).
- JPA support for Hibernate ORM 6.1 (retaining compatibility with Hibernate ORM 5.6).
- Upgrade to R2DBC 1.0 (including R2DBC transaction definitions).
- Aligned data access exception translation between JDBC, R2DBC, JPA and Hibernate.
- Removal of JCA CCI support.
-
RSocket interface client based on
@RSocketExchangeservice interfaces. - Early support for Reactor Netty 2 based on Netty 5 alpha.
- Support for Jakarta WebSocket 2.1 and its standard WebSocket protocol upgrade mechanism.
-
HTTP interface client based on
@HttpExchangeservice interfaces. - Support for RFC 7807 problem details.
- Unified HTTP status code handling.
- Support for Jackson 2.14.
- Alignment with Servlet 6.0 (while retaining runtime compatibility with Servlet 5.0).
-
PathPatternParserused by default (with the ability to opt intoPathMatcher). - Removal of outdated Tiles and FreeMarker JSP support.
- New
PartEventAPI to stream multipart form uploads (both on client and server). - New
ResponseEntityExceptionHandlerto customize WebFlux exceptions and render RFC 7807 error responses. -
Fluxreturn values for non-streaming media types (no longer collected toListbefore written). - Early support for Reactor Netty 2 based on Netty 5 alpha.
- JDK
HttpClientintegrated withWebClient.
Direct Observability instrumentation with Micrometer Observation in several parts of the Spring Framework. The spring-web module now requires io.micrometer:micrometer-observation:1.10+ as a compile dependency.
-
RestTemplateandWebClientare instrumented to produce HTTP client request observations. - Spring MVC can be instrumented for HTTP server observations using the new
org.springframework.web.filter.ServerHttpObservationFilter. - Spring WebFlux can be instrumented for HTTP server observations using the new
org.springframework.web.filter.reactive.ServerHttpObservationFilter. - Integration with Micrometer Context Propagation for
FluxandMonoreturn values from controller methods.
- Support for testing AOT-processed application contexts on the JVM or within a GraalVM native image.
- Integration with HtmlUnit 2.64+ request parameter handling.
- Servlet mocks (
MockHttpServletRequest,MockHttpSession) are based on Servlet API 6.0 now.