Spring Framework 5.0的主要更改(新功能和改进),计划于2017年7月发布,而RC1于2017年5月8日发布,从那时起分为若干次(共7次)。 。)我想介绍一下。
在本条目中,我们计划用示例代码具体解释" Spring Framework 5.0的新功能和增强功能"中引入的内容。 (相反,我不会介绍" Spring Framework 5.0的新功能和增强功能"中未包含的更改,因此,对不起????
)
另外,这是第一次,我将仅作简要概述(日语翻译α),并在下一次给出具体说明。
话题
在本条目中,我们将把Spring Framework 5.0的主要更改分为以下八个主题,以对其进行介绍。
-
更改JDK 8和Java EE 7基准
-
删除的包,类和方法
-
通用核心
-
DI容器
-
WebMVC
-
测试
-
WebFlux(新功能)
-
Kotlin支持(新)
系列
-
第1部分:Spring Framework 5.0主要更改摘要
-
第2部分:Spring Framework 5.0核心功能的主要更改
-
第3部分:与Spring Framework 5.0 DI容器相关的主要更改
-
第4部分:与Spring Framework 5.0 Web MVC相关的主要更改
-
第5部分:与Spring Framework 5.0 Test相关的主要更改
-
第六名:Spring Framework 5.0 WebFlux(反应式Web框架)(计划中)
-
第七名:Spring Framework 5.0 Kotlin支持(计划中)
JDK 8和Java EE 7基准
在Spring Framework 5.0中,Spring Framework 4系列所支持的对JDK 6和7的支持已经结束,并且需要JDK 8或更高版本。这不仅涉及类文件中字节码的目标版本,而且Spring源代码本身的代码在很大程度上取决于JDK 8支持的功能(lambda表达式,Stream API,Optional,Data and Time API等)。 。)(现有代码也已重构)。
另外,受支持的Java EE规范版本已更新为Java EE 7(Servlet 3.1,JMS 2.0,JPA 2.1,Bean验证1.1等)和部分Java EE 8(Servlet 4.0,Bean验证2.0,JSON绑定API,等))也受支持。
注意:
如果无法升级到Java SE 8或Java EE 7,请使用Spring Framework 4.3。 Spring Framework 4.3将一直支持到2019年。该信息有些陈旧(从4.3.0.RELEASE起),但是从相同的angular也总结了" Spring Framework 4.3中的主要更改"。
删除的包,类和方法
在Spring Framework 5.0中,实际上删除了Spring Framework 4系列中不推荐使用的许多类和方法。例如???
-
[SPR-13229]与Tiles 2.x的链接类
-
[SPR-13827] Hibernate ORM 3.x集成类
-
[SPR-13795]速度合作课程
-
[SPR-13796]与XMLBeans的链接类
-
[SPR-14485] org.springframework.mock.staticmock程序包类(例如AnnotationDrivenStaticEntityMockingControl)
例如,
。还有许多Spring Framework 5.0不支持的库和功能,例如???
。
-
[SPR-13827]hibernateORM 4.x集成类
-
[SPR-13294]与JasperReports
的链接类
-
[SPR-14130]与JDO(Java数据对象)的链接类
-
[SPR-13797] Guava的Cache函数链接类
-
[SPR-14129] spring-webmvc-portlet模块
-
[SPR-15154] org.springframework.beans.factory.access程序包类(例如BeanFactoryLocator)
-
[SPR-14670] org.springframework.jdbc.support.nativejdbc包类(例如NativeJdbcExtractor)
可以提及
等。
注意:
如果要继续使用这些类,库和功能,请使用Spring Framework 4.3。 Spring Framework 4.3将一直支持到2019年。该信息有些陈旧(从4.3.0.RELEASE起),但是从相同的angular也总结了" Spring Framework 4.3中的主要更改"。
通用核心
在Spring Framework 5.0中,对不依赖于应用程序类型的通用功能(=核心功能)进行了以下更改。 [详细信息
]
<表格>
| 产品编号 th>
| 更改 th>
tr>
header>
<身体>
|
| 1 td>
| 允许使用JDK 8支持的机制高效地访问方法参数。 [详细信息 ] 注意:由于它是内部实现,因此外部规格不会更改。 td>
tr>
|
| 2 td>
| 现在,某些接口将实现JDK 8支持的默认方法。 [详细信息 ] 注意:在为这些接口创建实现类(扩展类)时,只需实现必要的方法,因此"提供空实现的适配器类"是没有必要的。采取诸如"创建"或"无用地执行空的实现"之类的措施。 td>
tr>
|
| 3 td>
| 现在使用JDK 7支持的StandardCharsets。 [详细信息 ] 注意:由于它是内部实现,因此外部规格不会更改。 td>
tr>
|
| 4 td>
| 现在调用Constructor#newInstance()实例化而不是Class#newInstance(),这将在JDK 9中弃用。 [详细信息 ] 注意:由于它是内部实现,因此外部规格不会更改。 td>
tr>
|
| 5 td>
|
添加了spring-jcl模块,以允许通过Commons Logging API通过Log4j 2.x,SLF4J,JUL(java.util.logging)进行日志记录。 [详细信息 ] 注意:在Spring Framework 4.3之前,不再需要日志桥库。 td>
tr>
|
| 6 td>
| 资源抽象接口(Resource)中已添加isFile()方法,以使您可以确定文件系统上是否存在资源。 [详细信息 ] td>
tr>
|
7 td>
readableChannel()方法已添加到
| 资源抽象接口(Resource),以允许通过ReadableByteChannel(新I / O)读取资源数据。 [详细信息 ] td>
tr>
tbody>
table>
DI容器
在Spring Framework 5.0中,对DI容器进行了以下更改。 [详细信息 ]
<表格>
| 产品编号 th>
| 更改 th>
tr>
header>
<身体>
|
| 1 td>
| 在编译时要注册为Bean的组件候选索引,作为对函数(@ComponentScan)的替代,该函数从类路径扫描组件,并在执行应用程序时将其注册到DI容器中(以缩短时间为目的)和恒定的应用程序启动时间)添加了创建机制。 [详细信息 ] td>
tr>
|
| 2 td>
| 当指示通过自动装配的注入是可选的(可选)时,您将能够指定由您自己的库或第三方库提供的@Nullable。 [详细信息 ] 注意:根据注释名称是否为"Nullable"进行判断。 td>
tr>
|
| 3 td>
|
将使用功能接口(Supplier)和用于自定义bean定义的接口(BeanDefinitionCustomizer)的bean注册方法(registerBean)添加到GenericApplicationContext和AnnotationConfigApplicationContext。 [详细信息 ] td>
tr>
|
4 td>
将AOP应用于使用" CGLIB代理"实现
| 接口的类(指定proxyTargetClass=true时),注释(在接口方法中指定的@Transactional,@Cacheable),@Sync等。 )将被读取。 [详细信息 ] td>
tr>
|
5 td>
取消了在
| XML中定义bean时指定的xsd文件(为过去的版本提供xsd文件)的生成管理,并且仅对应版本的xsd文件将存储在JAR文件中。 [详细信息 ] 注意:仍支持在XML文件中指定版本化的xsd文件,但是在解析XML文件时始终使用相同的xsd文件。 td>
tr>
tbody>
table>
WebMVC
在Spring Framework 5.0中,对WEB函数进行了以下更改。 [详细信息 ]
<表格>
| 产品编号 th>
| 更改 th>
tr>
header>
<身体>
|
| 1 td>
| Spring Framework提供的Servlet过滤器是Servlet 3.1的API规范兼容实现。 (实际上,我不知道它如何符合??? )[详细信息 ] td>
tr>
|
| 2 td>
| 您将能够接收Servlet 4.0中添加的PushBuilder(用于HTTP / 2服务器推送的API),它是Java EE 8的组件,是Spring MVC的Handler方法的参数。 [详细信息 ] td>
tr>
|
3 td>
现在,当
| Servlet 3.0支持的文件上传功能发生超大错误时,将抛出
| MaxUploadSizeExceededException(子元素MultipartException)。 [详细信息 ] 注意:但是,由于确定错误消息是否包含特定单词("size"和"exceed"),因此应用程序服务器实现值得注意的是MultipartException可能仍然在某些情况下被抛出。 td>
tr>
|
| 4 td>
| 添加了统一的媒体类型解析机制(MediaTypeFactory类)。 [详细信息 ] 注:有了此支持,将消除依赖JAF(JavaBeans激活框架)的代码。 td>
tr>
|
| 5 td>
| 支持将数据绑定到不可变对象。 [详细信息 ] td>
tr>
|
| 6 td>
| 现在支持Jackson 2.9。 [详细信息 ] td>
tr>
|
7 td>
支持
| Java EE 8的组件JSON绑定。 注意:此方法可以替代Jackson和GSON。 [详细信息 ] td>
tr>
|
| 8 td>
| 支持Google Protobuf3.x。 [详细信息 ] td>
tr>
|
| 9 td>
| 支持反应式编程模型(以下为Spring WebFlux),Reactor 3.1类(Flux,Mono),RxJava 1.3和2.1类(Observable,Sigle,Flowable等)可以被视为Handler方法的返回值。 [详细信息 ] td>
tr>
|
| 10 td>
|
添加了ParsingPathMatcher作为AntPathMatcher的替代。 [详细信息 ] 注意:ParsingPathMatcher默认用于与Spring WebFlux相关的组件。 td>
tr>
|
| 11 td>
|
您将能够接收RedirectAttributes作为@ExceptionHandler方法的参数。 (可以通过RedirectAttributes将数据链接到重定向目标)[Details ] td>
tr>
|
| 12 td>
|
添加了ResponseStatusException,以通过抛出带有任意状态码和原因短语的异常来控制HTTP状态。 [详细信息 ] 注意:ResponseStatusException似乎是为Spring WebFlux创建的,但也支持与Spring MVC一起使用。 td>
tr>
|
| 13 td>
|
对象(ScriptTemplateView(使用JSR-223脚本引擎的视图实现)中实现"消息的国际化"和"模板的碎片化"所需的对象(Locale,MessageSource等)将传递到模板引擎侧。 [详细信息 ] 注意:Spring不提供"国际化"和"片段化模板"的实现本身,因此开发人员可以参考Spring测试用例等。必须实现。 td>
tr>
tbody>
table>
测试
在Spring Framework 5.0中,对测试功能进行了以下更改。 [详细信息 ]
<表格>
| 产品编号 th>
| 更改 th>
tr>
header>
<身体>
|
| 1 td>
| Spring TestContext Framework(TCF)现在在JUnit 5 Jupiter上可用。 [详细信息 ] 注意:添加了SpringExtension类,@SpringJUnitConfig注释,@SpringJUnitWebConfig注释,@EnabledIf注释和@DisabledIf注释。 td>
tr>
|
| 2 td>
| 允许您使用Spring TestContext Framework并行运行测试。 [详细信息 ] td>
tr>
|
| 3 td>
|
在测试之前和之后立即调用的回调方法(beforeTestExecution和afterTestExecution)被添加到TestExecutionListener接口。 [详细信息 ] td>
tr>
|
| 4 td>
|
用于访问请求BODY的方法(getContentAsByteArray和getContentAsString)已添加到MockHttpServletRequest。 [详细信息 ] td>
tr>
|
| 5 td>
|
当使用MockMvc到控制台或日志中输出测试结果时(使用MockMvcResultHandlers的print或log方法时),也会输出请求BODY。 [详细信息 ] td>
tr>
|
| 6 td>
|
使用MockMvc验证"重定向目标URL"和"转发目标URL"时,可以为期望值指定URI模板。 [详细信息 ] td>
tr>
|
| 7 td>
| 支持XML验证的库XMLUnit的版本为2.3。 [详细信息 ] td>
tr>
tbody>
table>
Web助焊剂
在Spring Framework 5.0中,添加了用于通过响应式编程模型开发非阻塞应用程序的Web框架(Spring WebFlux),并且作为运行时环境,"兼容Servlet 3.1的应用程序服务器"" Netty(Reactor Netty)"支持Undertow。
响应式编程模型是Spring Framework 5中引入的新功能,因此阅读" Spring Framework参考文档-WebFlux framework-"(→但是???有些文档尚未更新。阅读它可能会更好。正式发布 之后,请仔细阅读。
注意:
???也许是日本最熟悉的Spring WebFlux @making博客(BLOG.IK.AM)的" First Spring WebFlux"系列必读! !!
-
"第一个Spring WebFlux(第1部分,尝试Spring WebFlux)"
-
"第一个Spring WebFlux(第1.5部分-不带Spring Boot的手动引导Spring WebFlux)"
同时宣布了"第2部分"和"第3部分",因此建议您定期观看。
具体地,采取以下措施。
<表格>
| 产品编号 th>
| 通讯内容 th>
tr>
header>
<身体>
|
| 1 td>
| Spring WebFlux被添加为Reactive编程模型的框架(Spring WebMVC的替代方案)。 Spring WebMVC是一个线程池执行模型的框架,该框架为一个(传统)请求分配一个线程,而WebFlux是一个使用异步执行和非阻塞机制的事件循环执行模型的框架。 注意:Spring MVC可以使用Servlet 3.0支持的异步执行机制在单独的线程中处理请求和响应,但是没有非阻塞支持。 td>
tr>
|
| 2 td>
| 作为反应式编程模型的基本功能,
-
接口(Encoder / Decoder)和实现类,用于抽象化"数据(消息)编码/解码(消息?Java对象转换)"
-
接口(DataBuffer)和实现类,用于抽象"数据(消息)输入/输出"
-
类(ReactiveAdapterRegistry),用于处理Reactive库(Reactor,RxJava等)提供的类,作为Controller的方法签名。
提供等等。 td>
tr>
|
| 3 td>
| 作为Web的反应式编程模型的基本功能
-
接口(HttpMessageWriter / HttpMessageReader)和实现类,用于抽象" HTTP BODY数据(消息)编码/解码(消息?Java对象转换)"
-
Servlet 3.1,Netty(Reactor Netty)和Undertow的服务器功能支持非阻塞I / O(WebHandler,HttpHandler,WebFilter等)
提供等等。 td>
tr>
|
4 td>
与
| Spring MVC相似,支持基于注释的编程模型(使用@Controller等),并且由Reactive库提供的类(Reactor,RxJava等)用作Handler方法的方法签名。您可以指定它。 td>
tr>
|
5 td>
作为基于
| 注释的编程模型的替代,支持"功能性Web框架(在Java方法中定义端点和Handler方法之间的映射的样式= RouterFunction)"。 td>
tr>
|
| 6 td>
| 已添加用于响应式编程模型(异步或非阻塞)的新HTTP客户端(WebClient)。 注意:AsyncRestTemplate是作为HTTP客户端提供的,用于异步通信,但是AsyncRestTemplate与WebClient相比,优势不大,后者支持非阻塞和Fluent API。从Spring Framework 5.0开始AsyncRestTemplate是已弃用的API。 td>
tr>
tbody>
table>
Kotlin支持
在Spring Framework 5.0中,提供了支持以使使用Kotlin开发Spring应用程序更加容易。有关更多信息,请参阅SéBASTIENDELEUZE的博客"在Spring Framework 5.0中介绍Kotlin支持"和@making的博客"支持Kotlin的Spring Framework 5 Kotlin支持"。
注意:
Spring Framework 5.0支持的Kotlin版本是1.1或更高版本。
具体地,采取以下措施。
<表格>
| 产品编号 th>
| 通讯内容 th>
tr>
header>
<身体>
|
| 1 td>
| 通过使用" Kotlin扩展"机制,您将能够使用"惯用的Kotlin代码"(类似于Kotlin的代码)来实现Spring Framework应用程序。 注意:此支持为多个接口和类提供,包括RestTemplateOperations和JdbcOperations。 td>
tr>
|
| 2 td>
| 通过利用"类型化参数"的机制,不必使用RestTemplate或WebFlux的API在方法的参数中明确指定要编码/解密的类。 td>
tr>
|
| 3 td>
| Spring提供了一些将Java Class对象作为参数的方法,但是您可以将KClass对象传递给那些方法。 td>
tr>
|
| 4 td>
|
使用@RequestParam,@RequestHeader等和@Autowired / @Inject注入对象(请求参数或bean)时,Kotlin的"空安全性"显示是否需要该对象。 。 (替代required=false) td>
tr>
|
| 5 td>
| Kotlin的DSL(域专用语言)是通过使用功能接口进行bean注册而准备的。 td>
tr>
|
| 6 td>
| Spring WebFlux提供的RouterFunction配置中提供了Kotlin的DSL。 td>
tr>
|
| 7 td>
|
Kotlin脚本可与ScriptTemplateView一起使用(使用JSR-223脚本引擎查看实现)。 注意:Spring MVC和Spring WebFlux均支持。 td>
tr>
|
| 8 td>
|
您可以用与集合(Map)相同的方式将对象添加到Model和ModelMap。 (例如:model["todo"] = todo
td>
tr>
tbody>
table>
概括
这些是" Spring Framework 5.0的新功能和增强功能"中引入的更改。 (在某些地方,我不确定解释是否正确,因此,如果您输入有误,请发表评论!)
可能我认为,如果仅是句子,有很多东西是无法传达的(我觉得这就像"嗯"),所以从下一次开始,我将把它与Spring Framewrok 4.3进行比较,并混合示例代码等。 。,并详细介绍更改内容。
注意:
有关Spring Framework 5.0中的所有更改,请参阅Spring JIRA问题。
-
M1 RC1:发布(截至2017年5月11日)
-
RC2?GA:未发布(截至2017年5月11日)
参考网站
-
" Spring Framework 5.0中的新功能和增强功能"
-
" Spring框架参考文档-Web Flux框架-"
-
"在Spring Framework 5.0中引入Kotlin支持"
-
" Spring Framework 5 Kotlin支持"
-
"第一个Spring WebFlux(第1部分,尝试Spring WebFlux)"
-
"第一个Spring WebFlux(第1.5部分-不带Spring Boot的手动引导Spring WebFlux)"
| | | | | |