6. Spring Framework 4.3 中的新功能和增强功能
4.3 版包括许多改进,如以下各节所述:
6.1 核心容器的改进
-
核心容器异常提供了更丰富的元数据,可以通过编程进行评估。
-
Java 8 默认方法被检测为 bean 属性的获取器/设置器。
-
注入主 bean 时不会创建惰性候选 bean。
-
如果目标 bean 仅定义一个构造函数,则不再需要指定
@Autowired
Comments。 -
@Configuration
类支持构造函数注入。 -
现在,用于指定
@EventListener
的condition
的任何 SpEL 表达式都可以引用 bean(例如@beanName.method()
)。 -
组合 Comments现在可以使用数组组件类型的单个元素覆盖元 Comments 中的数组属性。例如,可以在组合的注解中用
String path
覆盖@RequestMapping
的String[] path
属性。 -
@PersistenceContext
/@PersistenceUnit
选择这样声明的主EntityManagerFactory
bean。 -
@Scheduled
和@Schedules
现在可以用作元 Comments,以创建具有属性覆盖的自定义组成的 Comments。 -
任意范围的 Bean 都正确支持
@Scheduled
。
6.2 数据访问改进
jdbc:initialize-database
和jdbc:embedded-database
支持将可配置的分隔符应用于每个脚本。
6.3 缓存改进
Spring 4.3 允许同步对给定键的并发调用,因此该值仅计算一次。这是一项启用功能,应通过@Cacheable
上的新sync
属性启用。此功能在Cache
接口中引入了重大变化,因为已添加get(Object key, Callable<T> valueLoader)
方法。
Spring 4.3 还改进了缓存抽象,如下所示:
-
与缓存相关的注解中的 SpEL 表达式现在可以引用 bean(即
@beanName.method()
)。 -
ConcurrentMapCacheManager
和ConcurrentMapCache
现在支持通过新的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 scope,Session scope和Application scope。
-
新的
@RestControllerAdvice
Comments 结合了@ControllerAdvice
和@ResponseBody
语义。 -
@ResponseStatus
现在在类级别受支持,并且被所有方法继承。 -
新的
@SessionAttribute
注解用于访问会话属性(请参见example)。 -
新的
@RequestAttribute
注解用于访问请求属性(请参见example)。 -
@ModelAttribute
允许通过binding=false
属性阻止数据绑定(请参见reference)。 -
@PathVariable
可以声明为可选(用于@ModelAttribute
方法)。 -
MVC 异常处理程序对错误和自定义 Throwables 的一致暴露。
-
HTTP 消息转换器中一致的字符集处理,包括 Multipart 文本内容的 UTF-8 默认值。
-
静态资源处理使用已配置的
ContentNegotiationManager
来确定媒体类型。 -
RestTemplate
和AsyncRestTemplate
通过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
APIApplicationContext
(在之后)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.