6. Spring Framework 4.3 中的新功能和增强功能

4.3 版包括许多改进,如以下各节所述:

6.1 核心容器的改进

  • 核心容器异常提供了更丰富的元数据,可以通过编程进行评估。

  • Java 8 默认方法被检测为 bean 属性的获取器/设置器。

  • 注入主 bean 时不会创建惰性候选 bean。

  • 如果目标 bean 仅定义一个构造函数,则不再需要指定@AutowiredComments。

  • @Configuration类支持构造函数注入。

  • 现在,用于指定@EventListenercondition的任何 SpEL 表达式都可以引用 bean(例如@beanName.method())。

  • 组合 Comments现在可以使用数组组件类型的单个元素覆盖元 Comments 中的数组属性。例如,可以在组合的注解中用String path覆盖@RequestMappingString[] path属性。

  • @PersistenceContext/@PersistenceUnit选择这样声明的主EntityManagerFactory bean。

  • @Scheduled@Schedules现在可以用作元 Comments,以创建具有属性覆盖的自定义组成的 Comments

  • 任意范围的 Bean 都正确支持@Scheduled

6.2 数据访问改进

  • jdbc:initialize-databasejdbc:embedded-database支持将可配置的分隔符应用于每个脚本。

6.3 缓存改进

Spring 4.3 允许同步对给定键的并发调用,因此该值仅计算一次。这是一项启用功能,应通过@Cacheable上的新sync属性启用。此功能在Cache接口中引入了重大变化,因为已添加get(Object key, Callable<T> valueLoader)方法。

Spring 4.3 还改进了缓存抽象,如下所示:

  • 与缓存相关的注解中的 SpEL 表达式现在可以引用 bean(即@beanName.method())。

  • ConcurrentMapCacheManagerConcurrentMapCache现在支持通过新的storeByValue属性对缓存条目进行序列化。

  • @Cacheable@CacheEvict@CachePut@Caching现在可以用作元 Comments,以创建具有属性覆盖的自定义组合 Comments

6.4 JMS 改进

  • 现在可以在类级别上指定@SendTo,以共享共同的回复目的地。

  • @JmsListener@JmsListeners现在可以用作元 Comments,以创建具有属性覆盖的自定义组成的 Comments

6.5 Web 改进

  • HTTP HEAD 和 HTTP 选项的内置支持。

  • 新的@GetMapping@PostMapping@PutMapping@DeleteMapping@PatchMapping 组成@RequestMapping的 Comments

  • 有关详情,请参见组成的@RequestMapping 变体

  • 用于网络范围的新的@RequestScope@SessionScope@ApplicationScope 组成的 Comments

  • 有关详细信息,请参见Request scopeSession scopeApplication scope

  • 新的@RestControllerAdviceComments 结合了@ControllerAdvice@ResponseBody语义。

  • @ResponseStatus现在在类级别受支持,并且被所有方法继承。

  • 新的@SessionAttribute注解用于访问会话属性(请参见example)。

  • 新的@RequestAttribute注解用于访问请求属性(请参见example)。

  • @ModelAttribute允许通过binding=false属性阻止数据绑定(请参见reference)。

  • @PathVariable可以声明为可选(用于@ModelAttribute方法)。

  • MVC 异常处理程序对错误和自定义 Throwables 的一致暴露。

  • HTTP 消息转换器中一致的字符集处理,包括 Multipart 文本内容的 UTF-8 默认值。

  • 静态资源处理使用已配置的ContentNegotiationManager来确定媒体类型。

  • RestTemplateAsyncRestTemplate通过DefaultUriTemplateHandler支持严格的 URI 变量编码。

  • AsyncRestTemplate支持请求拦截。

6.6 WebSocket 消息传递的改进

  • 现在可以在类指定@SendTo@SendToUser以共享一个共同的目的地。

6.7 测试改进

  • Spring TestContext Framework *中的 JUnit 支持现在需要 JUnit 4.12 或更高版本。

  • SpringJUnit4ClassRunner新增了SpringRunner 别名

  • 现在可以在接口上声明与测试相关的 Comments,例如,与* test interfaces *一起使用,这些接口使用基于 Java 8 的接口默认方法。

  • 如果检测到默认 XML 文件,Groovy 脚本或@Configuration类,现在可以完全省略@ContextConfiguration的空声明。

  • 不再要求@Transactional测试方法为public(例如,在 TestNG 和 JUnit 5 中)。

  • 不再要求@BeforeTransaction@AfterTransaction方法为public,现在可以在基于 Java 8 的接口默认方法中声明它们。

  • 现在,* Spring TestContext Framework 中的ApplicationContext缓存的默认最大大小为 32,并且具有最近最少使用*的逐出策略。可以通过设置 JVM 系统属性或名为spring.test.context.cache.maxSize的 Spring 属性来配置最大大小。

  • 用于自定义测试的新ContextCustomizer API ApplicationContext(在之后)bean 定义已加载到上下文中,但之前,上下文已刷新。定制程序可以由第三方进行全局注册,而无需实现自定义ContextLoader

  • @Sql@SqlGroup现在可以用作元 Comments,以创建具有属性覆盖的自定义组成的 Comments

  • ReflectionTestUtils现在会在设置或获取字段时自动解包代理。

  • 服务器端 Spring MVC 测试支持对具有多个值的响应头的期望。

  • 服务器端 Spring MVC Test 解析表单数据请求内容并填充请求参数。

  • 服务器端 Spring MVC 测试为调用的处理程序方法支持类似模拟的 assert。

  • Client 端 REST 测试支持可指示期望请求的次数以及是否应忽略期望的声明 Sequences(请参阅第 15.6.3 节“Client 端 REST 测试”)。

  • Client 端 REST 测试支持对请求正文中的表单数据的期望。

6.8 对新一代库和服务器的支持

  • Hibernate ORM 5.2(仍支持 4.2/4.3 和 5.0/5.1,现已弃用 3.6)

  • Hibernate Validator 5.3(最低保留为 4.3)

  • Jackson 2.8(从 Spring 4.3 最低提高到 Jackson 2.6)

  • OkHttp 3.x(仍然支持 OkHttp 2.x)

  • Tomcat 8.5 和 9.0 里程碑

  • Netty 4.1

  • Undertow 1.4

  • WildFly 10.1

此外,Spring Framework 4.3 在spring-core.jar中嵌入了更新的 ASM 5.1,CGLIB 3.2.4 和 Objenesis 2.4.