spring 5.x(1)-----Spring Framework 5.x中的新功能

Spring Framework 5.x中有什么新功能

 

5.1版中的新功能

一般核心修订

  • 基础设施:
    • 在类路径和模块路径上对JDK 11的无警告支持。
    • 支持Graal原生图像约束(反射,参数名称)。
    • 升级到Reactor Core 3.2和Reactor Netty 0.8(“Reactor Californium”)。
    • 升级到ASM 7.0和CGLIB 3.2.8。
  • 核心设施:
    • FileSystemResource中的NIO.2路径支持(取代PathResource)。
    • 核心类型和注释解析的性能改进。
    • 一致地检测通用接口上的方法注释。
  • 记录修订:
    • 可以通过标准的Commons Logging检测Spring的JCL桥。
    • 减少信息噪音,可读的调试日志,跟踪级别的详细信息。

核心容器

  • Bean定义:
    • 支持@Profile条件中的逻辑和/或表达式。
    • 嵌套配置类的一致(非)检测。
    • 精制Kotlin DSL。
      • 相同类型的多个bean的唯一隐式bean名称。
  • Bean检索:
    • 在BeanFactory API中一致地不暴露零bean。
    • 通过BeanFactory API进行编程的ObjectProvider检索。
    • ObjectProvider可以为bean-of-type解析的可迭代/流访问。
    • 单个构造函数场景中的空集合/映射/数组注入。

一般网站修订

  • 在接口上也可以检测到控制器参数注释:
    • 允许在控制器接口中完成映射合同。
  • 支持更严格的URI变量编码UriComponentsBuilder
  • Servlet使用HTTP PUT,PATCH和DELETE请求params:

Spring Web MVC

  • 记录
    • 改进,人性化,紧凑,DEBUG和TRACE记录。
    • 控制潜在敏感数据的DEBUG记录。
      • 通过 DispatcherServlet#enableLoggingRequestDetails
  • 更新的Web区域设置表示:
    • 语言标签默认符合。
    • CookieLocaleResolver发送符合RFC6265的时区cookie。
  • 缺少标头,cookie,路径变量的特定MVC异常:
    • 允许区分异常处理和状态代码。
  • 外部配置的基本路径,用于注释控制器集。
  • 通过以下方式集中处理“转发”类型标头ForwardedHeaderFilter
  • 除了GZip之外,还支持为Brotli提供预编码的静态资源。

Spring WebFlux

  • 使用Reactor Netty 0.8运行时支持HTTP / 2服务器。
  • 记录
    • 改进,人性化,紧凑,DEBUG和TRACE记录。
    • HTTP请求和WebSocket会话的相关日志消息。
    • 控制潜在敏感数据的DEBUG记录。
      • 通过 CodecConfigurer#defaultCodecs
  • 会话cookie现在必须SameSite=Lax防止CSRF攻击:
  • DSL增强功能:
    • RouterFunction没有静态导入的DSL样式构建器(示例)。
    • 精制Kotlin路由器DSL。
  • 外部配置的基本路径,用于注释控制器集。
  • 第三方集成:
  • WebSocket的:
    • 支持WebSocketSession属性。
    • 改进有关反应式WebSocket API处理的文档。
  • 除了GZip之外,还支持为Brotli提供预编码的静态资源。

spring消息

  • 在@MessageMapping方法中支持被动客户端:
    • 对Reactor和RxJava返回值的开箱即用支持。
  • 选项以保留 STOMP代理的消息发布顺序。
  • @SendTo并且@SendToUser可以既被用于在控制器的方法。
  • 改进了有关处理消息和订阅的文档。

spring ORM

  • 支持Hibernate ORM 5.3:
    • Bean容器与Hibernate的新SPI集成。
  • LocalSessionFactoryBean和HibernateTransactionManager支持JPA交互:
    • 在同一事务中允许本机Hibernate以及JPA访问。
  • 只读事务不再在内存中保留Hibernate实体快照:
    • Session.setDefaultReadOnly(true)默认情况下。
  • SAP HANA作为常见的JpaVendorAdapter数据库平台。

测试

  • Hamcrest和XML断言WebTestClient
  • MockServerWebExchange可以配置固定WebSession

5.0版中有什么新功能

JDK 8+和Java EE 7+ Baseline

  • 现在基于Java 8源代码级别的整个框架代码库。
    • 通过推断的泛型,lambdas等提高可读性。
    • Java 8的条件支持功能现在采用直接代码。
  • 与JDK 9完全兼容,可用于开发和部署。
    • 在类路径和模块路径上(具有稳定的自动模块名称)。
    • 框架构建和测试套件在JDK 9上传递(默认情况下在JDK 8上运行)。
  • 现在,Spring的相应功能需要Java EE 7 API级别。
    • Servlet 3.1,Bean Validation 1.1,JPA 2.1,JMS 2.0
    • 最近的服务器:例如Tomcat 8.5 +,Jetty 9.4 +,WildFly 10+
  • 在运行时与Java EE 8 API级别的兼容性。
    • Servlet 4.0,Bean Validation 2.0,JPA 2.2,JSON Binding API 1.0
    • 针对Tomcat 9.0,Hibernate Validator 6.0,Apache Johnzon 1.1进行了测试

删除了包,类和方法

  • beans.factory.accessBeanFactoryLocator机制)。
  • jdbc.support.nativejdbcNativeJdbcExtractor机制)。
  • mock.staticmockspring-aspects模块中删除。
    • 不再支持AnnotationDrivenStaticEntityMockingControl了。
  • 包裹web.view.tiles2orm.hibernate3/hibernate4丢弃。
    • 最低要求:现在是Tiles 3和Hibernate 5。
  • 删除支持:Portlet,Velocity,JasperReports,XMLBeans,JDO,Guava。
    • 建议:如果需要,请继续使用Spring Framework 4.3.x.
  • 在代码库中删除了许多已弃用的类和方法。
    • 对生态系统中常用方法做出了一些妥协。

一般核心修订

  • JDK 8+增强功能:
    • 基于Java 8反射增强的高效方法参数访问。
    • 核心Spring接口中Java 8默认方法的选择性声明。
    • 一致使用JDK 7 CharsetStandardCharsets增强功能。
  • JDK 9兼容性:
    • 避免尽可能在JDK 9中弃用的JDK API。
    • 通过构造函数进行一致的实例化(具有修订的异常处理)。
    • 防御使用反射核心JDK类。
  • 包级别的非null API声明:
    • 可明确注释的可为空的参数,字段和返回值@Nullable
    • 主要用于IntelliJ IDEA和Kotlin,还有Eclipse和FindBugs。
    • 一些Spring API不再容忍null值(例如in StringUtils)。
  • Resource抽象提供isFile了防御性getFile访问的指标。
    • readableChannelResource界面中还具有基于NIO的访问器。
    • 通过NIO.2流访问文件系统(不再FileInput/OutputStream使用)。
  • Spring Framework 5.0自带了自己的Commons Logging桥:
    • spring-jcl而不是标准的Commons Logging; 仍然是排他性/可覆盖的。
    • 无需任何额外桥接即可自动检测Log4j 2.x,SLF4J,JUL(java.util.logging)。
  • spring-core 附带ASM 6.0(CGLIB 3.2.5和Objenesis 2.6旁边)。

核心容器

  • 支持任何@Nullable注释作为可选注入点的指示器。
  • 功能风格GenericApplicationContext/AnnotationConfigApplicationContext
    • Supplier基于bean定义器回调的基于bean的注册API。
  • 在接口方法上一致地检测事务,缓存,异步注释。
    • 在CGLIB代理的情况下。
  • XML配置命名空间简化为未版本化的模式。
    • 始终解决最新xsd文件; 不支持已弃用的功能。
    • 特定于版本的声明仍受支持,但针对最新架构进行了验证。
  • 支持候选组件索引(作为类路径扫描的替代方案)。

Spring Web MVC

  • Spring提供的Filter实现中的完整Servlet 3.1签名支持。
  • 支持PushBuilderSpring MVC控制器方法中的Servlet 4.0 参数。
  • MaxUploadSizeExceededException 用于在公共服务器上进行Servlet 3.0多部分解析。
  • 通过MediaTypeFactory委托统一支持常见媒体类型。
    • 取代Java Activation Framework的使用。
  • 与不可变对象的数据绑定(Kotlin / Lombok / @ConstructorProperties
  • 支持JSON绑定API(使用Eclipse Yasson或Apache Johnzon替代Jackson和GSON)。
  • 支持Jackson 2.9。
  • 支持Protobuf 3。
  • 反应堆3.1支持FluxMono以及RxJava 1.3和2.1作为返回值从Spring MVC的控制器方法靶向使用新的反应性的WebClient(见下文)或Spring MVC控制器弹簧数据活性库。
  • 更高效的解析和扩展语法的ParsingPathMatcher替代方案。AntPathMatcher
  • @ExceptionHandler方法允许RedirectAttributes参数(以及flash属性)。
  • 支持ResponseStatusException作为程序替代@ResponseStatus
  • 支持Invocable通过直接呈现使​​用提供的脚本实现的脚本引擎ScriptEngine#eval(String, Bindings),以及ScriptTemplateView通过新RenderingContext参数的i18n和嵌套模板。
  • Spring的FreeMarker宏(spring.ftl)现在使用HTML输出格式(需要FreeMarker 2.3.24+)。

Spring WebFlux

  • 新的spring-webflux模块,spring-webmvc构建在反应式基础上的替代方案- 完全异步和非阻塞,旨在用于事件循环执行模型与传统的大型线程池(每个请求线程执行模型)。
  • 反应性的基础设施中spring-core,例如EncoderDecoder对对象的编码和解码流; DataBuffer抽象,例如使用Java ByteBuffer或Netty ByteBufReactiveAdapterRegistry用于控制器方法签名中的反应库的透明支持。
  • 反应性基础设施spring-web包括HttpMessageReaderHttpMessageWriter建立和委托EncoderDecoder; 服务器,HttpHandler带有适配器(非阻塞)运行时,如Servlet 3.1+容器,Netty和Undertow; WebFilterWebHandler以及Servlet API等价物的其他非阻塞合同替代方案。
  • @Controller 样式,基于注释的编程模型,类似于Spring MVC,但在WebFlux中支持,在反应堆栈上运行,例如能够支持反应类型作为控制器方法参数,从不阻塞I / O,一直遵守背压HTTP套接字,并在额外的非Servlet容器(如Netty和Undertow)上运行。
  • 新的函数式编程模型(“WebFlux.fn”)作为@Controller基于注释的编程模型的替代方案 - 使用端点路由API进行最小化和透明化,在相同的反应堆栈和WebFlux基础架构上运行。
  • 全新WebClient的HTTP呼叫功能和反应API,可与RestTemplate流畅的API 相媲美,并且在基于WebFlux基础设施的非阻塞和流媒体场景中表现优异; 在5.0中,AsyncRestTemplate不赞成使用WebClient

Kotlin的支持

  • 使用Kotlin 1.1.50或更高版本时,使用Null安全API。
  • 支持带有可选参数和默认值的Kotlin不可变类。
  • 功能bean定义Kotlin DSL。
  • 用于WebFlux的功能路由Kotlin DSL。
  • 利用Kotlin reified类型参数来避免Class在各种API(如RestTemplateWebFlux API)中明确指定用于序列化/反序列化。
  • @Autowired@Inject@RequestParam@RequestHeader/ etc注释的Kotlin零安全支持,以确定是否需要注入点或处理程序方法参数。
  • ScriptTemplateViewSpring MVC和Spring WebFlux都支持Kotlin脚本。
  • 类似于数组的setter添加到ModelModelMapEnvironment
  • 支持带有可选参数的Kotlin自动装配构造函数。
  • Kotlin反射用于确定界面方法参数。

测试改进

  • 在Spring TestContext Framework中完全支持JUnit 5Jupiter编程和扩展模型。
    • SpringExtension:来自JUnit Jupiter的多个扩展API的实现,它为Spring TestContext Framework的现有功能集提供完全支持。此支持通过@ExtendWith(SpringExtension.class)
    • @SpringJUnitConfig:一个组合的注释,它结合@ExtendWith(SpringExtension.class)了JUnit Jupiter和@ContextConfigurationSpring TestContext Framework。
    • @SpringJUnitWebConfig:一个组合的注释,它结合@ExtendWith(SpringExtension.class)了JUnit Jupiter @ContextConfiguration@WebAppConfigurationSpring TestContext Framework。
    • @EnabledIf:表示如果提供的SpEL表达式或属性占位符求值,则启用带注释的测试类或测试方法true
    • @DisabledIf:表示如果提供的SpEL表达式或属性占位符求值,则禁用带注释的测试类或测试方法true
  • 支持Spring TestContext Framework中的并行测试执行
  • Spring TestContext Framework中测试执行回调之前之后的新增功能,通过SpringRunner(但不是通过JUnit 4规则)支持TestNG,JUnit 5和JUnit 4 。
    • API和API 中的新增beforeTestExecution()afterTestExecution()回调。TestExecutionListenerTestContextManager
  • MockHttpServletRequest现在有getContentAsByteArray()getContentAsString()访问内容的方法(即请求体)。
  • 如果在模拟请求中设置了字符编码,则Spring MVC Test中的print()log()方法现在会打印请求主体。
  • Spring MVC Test中的redirectedUrl()forwardedUrl()方法现在支持具有可变扩展的URI模板。
  • XMLUnit支持升级到2.3。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值