Spring5是spring的一个重要更新版本,距离SpringFramework4隔了快四年。这段时间内,大多数增强都是在SpringBoot项目中完成的。而接下来,我就将带你们了解spring5的新特性,与这次更新带来的利与弊。 1。基准升级 要构建和运行Spring5应用程序,你至少需要J2EE7和JDK8。以前的JDK和JavaEE版本不再支持。JavaEE7包含: Servlet3。1 JMS2。0 JPA2。1 JAXRS2。0 BeanValidation1。1 与Java基准类似,许多其他框架的基准也有变化。例如: Hibernate5 Jackson2。6 EhCache2。10 JUnit5 Tiles3 另外,请记下各种服务器最低支持版本。 Tomcat8。5 Jetty9。4 WildFly10 Netty4。1 Undertow1。4 2。使用JDK8特性 在Spring4。3之前,JDK基准版本是6。所以Spring4必须支持Java6,7和8,为了保持向后兼容性,Spring框架没有适应Java8带来的许多新特性,比如lambda表达式。 Spring5的基准版本为8,因此它使用了Java8和9的许多新特性。例如: Spring接口中的默认方法 基于Java8反射增强的内部代码改进 在框架代码中使用函数式编程lambda表达式和stream流 3。兼容JDK9运行时 Spring5发行版与JDK9发行日期非常接近。目标是让SpringFramework5在JDK9的GA之后正确运行。Spring5版本的候选版本已经在classpath和modulepath上支持Java9了。 GA版本中你可以期待良好的JDK9支持。 4。函数式web框架 除了响应式功能之外,Spring5还提供了一个函数式Web框架。它提供了使用函数式编程风格来定义端点的特性。该框架引入了两个基本组件:HandlerFunction和RouterFunction。 HandlerFunction表示处理接收到的请求并生成响应的函数。RouterFunction替代了RequestMapping注解。它用于将接收到的请求路由到处理函数。例如: RouterFunctionroute route(GET(helloworld), requestResponse。ok()。body(fromObject(HelloWorld))); 5。额外库支持 Spring5。0现在支持下面的库版本: JackSon2。6 EhCache2。103。0GA Hibernate5。0 JDBC4。0 XmlUnit2。x OkHttp3。x Netty4。1 停止维护的一些特性 在Api层面上,Spring5。0不在支持下面的包了: beans。factory。access jdbc。support。nativejdbc springaspects模块的mock。staticmock web。view。tiles2M。现在Tiles3是最低要求的版本 orm。hibernate3和orm。hibernate4。现在支持Hibernate5 6。对Kotlin的支持 Spring5。0对Kotlin的支持如下。 使用Kotlin1。1。50或更高版本时,可以支持Null安全的API。 支持带有可选参数和默认值的Kotlin不可变类。 支持使用KotlinDSL定义函数式Bean。 支持在WebFlux中使用有路由功能的KotlinDSL。 利用Kotlinreified的类型参数来避免在各种API(如RestTemplate或WebFluxAPI)中明确指定用于序列化反序列化的Class。 对autowired、Inject、RequestParam和RequestHeader等注解的Kotlinnull安全支持,以确定注入点或处理程序方法参数是否合法。 ScriptTemplateView中的Kotlin脚本支持SpringMVC和SpringWebFlux。 支持带有可选参数的Kotlin自动装配构造函数。 Kotlin反射用于确定接口方法参数。 7。反应式编程模型 Spring5最令人兴奋的新特性是它的反应式编程模型。Spring5Framework基于一种反应式基础而构建,而且是完全异步和非阻塞的。只需少量的线程,新的事件循环执行模型就可以垂直扩展。 该框架采用反应式流来提供在反应式组件中传播负压的机制。负压是一个确保来自多个生产者的数据不会让使用者不堪重负的概念。 SpringWebFlux是Spring5的反应式核心,它为开发人员提供了两种为SpringWeb编程而设计的编程模型:一种基于注解的模型和FunctionalWebFramework(WebFlux。fn)。 基于注解的模型是SpringWebMVC的现代替代方案,该模型基于反应式基础而构建,而FunctionalWebFramework是基于Controller注解的编程模型的替代方案。这些模型都通过同一种反应式基础来运行,后者调整非阻塞HTTP来适应反应式流API。 8。不再支持如下库: Portlet Velocity JasperReports XMLBeans JDO Guava 如果你在当前的项目中使用到了上面提到的这些库,那么最好不要升级到Spring5的版本 9。测试改进 Spring5。0测试改进如下。 在SpringTestContextFramework中完全支持JUnit5Jupiter编程和扩展模型。 SpringExtension:是JUnitJupiter的多个扩展API的实现,它为SpringTestContextFramework的现有功能集提供完全支持。通过ExtendWith(SpringExtension。class)启用此支持。 SpringJUnitConfig:一个复合注释,它将来自JUnitJupiter的ExtendWith(SpringExtension。class)与来自SpringTestContextFramework的ContextConfiguration相结合。 SpringJUnitWebConfig:一个复合注释,它将来自JUnitJupiter的ExtendWith(SpringExtension。class)与来自SpringTestContextFramework的ContextConfiguration和WebAppConfiguration相结合。 EnabledIf:如果提供的SpEL表达式或属性占位符的计算结果为true,则表示已启用带注释的测试类或测试方法。 DisabledIf:如果提供的SpEL表达式或属性占位符的计算结果为true,则表示禁用带注释的测试类或测试方法。 支持SpringTestContextFramework执行并行测试。 SpringTestContextFramework新增测试之前和测试之后的执行回调功能。 TestExecutionListenerAPI和TestContextManager新增beforeTestExecution()和afterTestExecution()回调。 MockHttpServletRequest现在具有用于访问请求体的方法getContentAsByteArray()和getContentAsString()。 如果在模拟请求中设置了字符编码,则SpringMVCTest中的print()和log()方法现在会打印请求主体。 SpringMVCTest中的redirectedUrl()和forwardedUrl()方法现在支持具有可变参数扩展的URI模板。 XMLUnit支持升级到XMLUnit2。3。 以上就是本期的所有内容了,要知道IT这一行业知识更新速度是非常快的,指不定什么时候出了一种新的框架,到时候如果不能跟上技术的进步只会落得个技术落后的下场,最自己能力提升会造成一个很大的影响。 希望大家点个关注,及时收取最新文章推送,想了解更多敬请咨询加米谷大数据。 有问题的欢迎在评论区留言,如有侵权请告知。