Spring Framework 5.0主要更改摘要


Spring Framework 5.0的主要更改(新功能和改进),计划于2017年7月发布,而RC1于2017年5月8日发布,从那时起分为若干次(共7次)。 。)我想介绍一下。
在本条目中,我们计划用示例代码具体解释" Spring Framework 5.0的新功能和增强功能"中引入的内容。 (相反,我不会介绍" Spring Framework 5.0的新功能和增强功能"中未包含的更改,因此,对不起???? :wink:)

另外,这是第一次,我将仅作简要概述(日语翻译α),并在下一次给出具体说明。

话题

在本条目中,我们将把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中,对不依赖于应用程序类型的通用功能(=核心功能)进行了以下更改。 [详细信息:arrow_right:]

<表格>

产品编号

更改


<身体>

1

允许使用JDK 8支持的机制高效地访问方法参数。 [详细信息:arrow_right:] 注意:由于它是内部实现,因此外部规格不会更改。

2

现在,某些接口将实现JDK 8支持的默认方法。 [详细信息:arrow_right:] 注意:在为这些接口创建实现类(扩展类)时,只需实现必要的方法,因此"提供空实现的适配器类"是没有必要的。采取诸如"创建"或"无用地执行空的实现"之类的措施。

3

现在使用JDK 7支持的StandardCharsets。 [详细信息:arrow_right:] 注意:由于它是内部实现,因此外部规格不会更改。

4

现在调用Constructor#newInstance()实例化而不是Class#newInstance(),这将在JDK 9中弃用。 [详细信息:arrow_right:] 注意:由于它是内部实现,因此外部规格不会更改。

5

添加了spring-jcl模块,以允许通过Commons Logging API通过Log4j 2.x,SLF4J,JUL(java.util.logging)进行日志记录。 [详细信息:arrow_right:] 注意:在Spring Framework 4.3之前,不再需要日志桥库。

6

资源抽象接口(Resource)中已添加isFile()方法,以使您可以确定文件系统上是否存在资源。 [详细信息:arrow_right:]

7
readableChannel()方法已添加到

资源抽象接口(Resource),以允许通过ReadableByteChannel(新I / O)读取资源数据。 [详细信息:arrow_right:]


DI容器

在Spring Framework 5.0中,对DI容器进行了以下更改。 [详细信息:arrow_right:]

<表格>

产品编号

更改


<身体>

1

在编译时要注册为Bean的组件候选索引,作为对函数(@ComponentScan)的替代,该函数从类路径扫描组件,并在执行应用程序时将其注册到DI容器中(以缩短时间为目的)和恒定的应用程序启动时间)添加了创建机制。 [详细信息:arrow_right:]

2

当指示通过自动装配的注入是可选的(可选)时,您将能够指定由您自己的库或第三方库提供的@Nullable。 [详细信息:arrow_right:] 注意:根据注释名称是否为"Nullable"进行判断。

3

将使用功能接口(Supplier)和用于自定义bean定义的接口(BeanDefinitionCustomizer)的bean注册方法(registerBean)添加到GenericApplicationContextAnnotationConfigApplicationContext。 [详细信息:arrow_right:]

4
将AOP应用于使用" CGLIB代理"实现

接口的类(指定proxyTargetClass=true时),注释(在接口方法中指定的@Transactional@Cacheable),@Sync等。 )将被读取。 [详细信息:arrow_right:]

5
取消了在

XML中定义bean时指定的xsd文件(为过去的版本提供xsd文件)的生成管理,并且仅对应版本的xsd文件将存储在JAR文件中。 [详细信息:arrow_right:] 注意:仍支持在XML文件中指定版本化的xsd文件,但是在解析XML文件时始终使用相同的xsd文件。


WebMVC

在Spring Framework 5.0中,对WEB函数进行了以下更改。 [详细信息:arrow_right:]

<表格>

产品编号

更改


<身体>

1

Spring Framework提供的Servlet过滤器是Servlet 3.1的API规范兼容实现。 (实际上,我不知道它如何符合??? :sweat_smile:)[详细信息:arrow_right:]

2

您将能够接收Servlet 4.0中添加的PushBuilder(用于HTTP / 2服务器推送的API),它是Java EE 8的组件,是Spring MVC的Handler方法的参数。 [详细信息:arrow_right:]

3
现在,当

Servlet 3.0支持的文件上传功能发生超大错误时,将抛出

MaxUploadSizeExceededException(子元素MultipartException)。 [详细信息:arrow_right:] 注意:但是,由于确定错误消息是否包含特定单词("size""exceed"),因此应用程序服务器实现值得注意的是MultipartException可能仍然在某些情况下被抛出。

4

添加了统一的媒体类型解析机制(MediaTypeFactory类)。 [详细信息:arrow_right:] 注:有了此支持,将消除依赖JAF(JavaBeans激活框架)的代码。

5

支持将数据绑定到不可变对象。 [详细信息:arrow_right:]

6

现在支持Jackson 2.9。 [详细信息:arrow_right:]

7
支持

Java EE 8的组件JSON绑定。 注意:此方法可以替代Jackson和GSON。 [详细信息:arrow_right:]

8

支持Google Protobuf3.x。 [详细信息:arrow_right:]

9

支持反应式编程模型(以下为Spring WebFlux),Reactor 3.1类(FluxMono),RxJava 1.3和2.1类(ObservableSigleFlowable等)可以被视为Handler方法的返回值。 [详细信息:arrow_right:]

10

添加了ParsingPathMatcher作为AntPathMatcher的替代。 [详细信息:arrow_right:] 注意:ParsingPathMatcher默认用于与Spring WebFlux相关的组件。

11

您将能够接收RedirectAttributes作为@ExceptionHandler方法的参数。 (可以通过RedirectAttributes将数据链接到重定向目标)[Details :arrow_right:]

12

添加了ResponseStatusException,以通过抛出带有任意状态码和原因短语的异常来控制HTTP状态。 [详细信息:arrow_right:] 注意:ResponseStatusException似乎是为Spring WebFlux创建的,但也支持与Spring MVC一起使用。

13

对象(ScriptTemplateView(使用JSR-223脚本引擎的视图实现)中实现"消息的国际化"和"模板的碎片化"所需的对象(LocaleMessageSource等)将传递到模板引擎侧。 [详细信息:arrow_right:] 注意:Spring不提供"国际化"和"片段化模板"的实现本身,因此开发人员可以参考Spring测试用例等。必须实现。


测试

在Spring Framework 5.0中,对测试功能进行了以下更改。 [详细信息:arrow_right:]

<表格>

产品编号

更改


<身体>

1

Spring TestContext Framework(TCF)现在在JUnit 5 Jupiter上可用。 [详细信息:arrow_right:] 注意:添加了SpringExtension类,@SpringJUnitConfig注释,@SpringJUnitWebConfig注释,@EnabledIf注释和@DisabledIf注释。

2

允许您使用Spring TestContext Framework并行运行测试。 [详细信息:arrow_right:]

3

在测试之前和之后立即调用的回调方法(beforeTestExecutionafterTestExecution)被添加到TestExecutionListener接口。 [详细信息:arrow_right:]

4

用于访问请求BODY的方法(getContentAsByteArraygetContentAsString)已添加到MockHttpServletRequest。 [详细信息:arrow_right:]

5

当使用MockMvc到控制台或日志中输出测试结果时(使用MockMvcResultHandlersprintlog方法时),也会输出请求BODY。 [详细信息:arrow_right:]

6

使用MockMvc验证"重定向目标URL"和"转发目标URL"时,可以为期望值指定URI模板。 [详细信息:arrow_right:]

7

支持XML验证的库XMLUnit的版本为2.3。 [详细信息:arrow_right:]


Web助焊剂

在Spring Framework 5.0中,添加了用于通过响应式编程模型开发非阻塞应用程序的Web框架(Spring WebFlux),并且作为运行时环境,"兼容Servlet 3.1的应用程序服务器"" Netty(Reactor Netty)"支持Undertow。
响应式编程模型是Spring Framework 5中引入的新功能,因此阅读" Spring Framework参考文档-WebFlux framework-"(→但是???有些文档尚未更新。阅读它可能会更好。正式发布:sweat_smile:之后,请仔细阅读。

注意:

???也许是日本最熟悉的Spring WebFlux @making博客(BLOG.IK.AM)的" First Spring WebFlux"系列必读! !!

  • "第一个Spring WebFlux(第1部分,尝试Spring WebFlux)"
  • "第一个Spring WebFlux(第1.5部分-不带Spring Boot的手动引导Spring WebFlux)"

同时宣布了"第2部分"和"第3部分",因此建议您定期观看。

具体地,采取以下措施。

<表格>

产品编号

通讯内容


<身体>

1

Spring WebFlux被添加为Reactive编程模型的框架(Spring WebMVC的替代方案)。 Spring WebMVC是一个线程池执行模型的框架,该框架为一个(传统)请求分配一个线程,而WebFlux是一个使用异步执行和非阻塞机制的事件循环执行模型的框架。 注意:Spring MVC可以使用Servlet 3.0支持的异步执行机制在单独的线程中处理请求和响应,但是没有非阻塞支持。

2

作为反应式编程模型的基本功能,

  • 接口(Encoder / Decoder)和实现类,用于抽象化"数据(消息)编码/解码(消息?Java对象转换)"
  • 接口(DataBuffer)和实现类,用于抽象"数据(消息)输入/输出"
  • 类(ReactiveAdapterRegistry),用于处理Reactive库(Reactor,RxJava等)提供的类,作为Controller的方法签名。

提供等等。

3

作为Web的反应式编程模型的基本功能

  • 接口(HttpMessageWriter / HttpMessageReader)和实现类,用于抽象" HTTP BODY数据(消息)编码/解码(消息?Java对象转换)"
  • Servlet 3.1,Netty(Reactor Netty)和Undertow的服务器功能支持非阻塞I / O(WebHandlerHttpHandlerWebFilter等)

提供等等。

4

Spring MVC相似,支持基于注释的编程模型(使用@Controller等),并且由Reactive库提供的类(Reactor,RxJava等)用作Handler方法的方法签名。您可以指定它。

5
作为基于

注释的编程模型的替代,支持"功能性Web框架(在Java方法中定义端点和Handler方法之间的映射的样式= RouterFunction)"。

6

已添加用于响应式编程模型(异步或非阻塞)的新HTTP客户端(WebClient)。 注意:AsyncRestTemplate是作为HTTP客户端提供的,用于异步通信,但是AsyncRestTemplateWebClient相比,优势不大,后者支持非阻塞和Fluent API。从Spring Framework 5.0开始AsyncRestTemplate是已弃用的API。


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或更高版本。

具体地,采取以下措施。

<表格>

产品编号

通讯内容


<身体>

1

通过使用" Kotlin扩展"机制,您将能够使用"惯用的Kotlin代码"(类似于Kotlin的代码)来实现Spring Framework应用程序。 注意:此支持为多个接口和类提供,包括RestTemplateOperationsJdbcOperations

2

通过利用"类型化参数"的机制,不必使用RestTemplate或WebFlux的API在方法的参数中明确指定要编码/解密的类。

3

Spring提供了一些将Java Class对象作为参数的方法,但是您可以将KClass对象传递给那些方法。

4

使用@RequestParam@RequestHeader等和@Autowired / @Inject注入对象(请求参数或bean)时,Kotlin的"空安全性"显示是否需要该对象。 。 (替代required=false)

5

Kotlin的DSL(域专用语言)是通过使用功能接口进行bean注册而准备的。

6

Spring WebFlux提供的RouterFunction配置中提供了Kotlin的DSL。

7

Kotlin脚本可与ScriptTemplateView一起使用(使用JSR-223脚本引擎查看实现)。 注意:Spring MVC和Spring WebFlux均支持。

8

您可以用与集合(Map)相同的方式将对象添加到ModelModelMap。 (例如:model["todo"] = todo



概括

这些是" 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)"