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

4.3版包含了许多改进,如以下部分所述:

6.1 核心容器改进

  • 核心容器异常提供更丰富的元数据以便以编程方式进行评估。

  • Java 8默认方法被检测为bean属性getter / setters。

  • 在注入主bean的情况下,不会创建惰性候选bean。

  • 如果目标bean只定义了一个构造函数,则不再需要指定 @Autowired 注释。

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

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

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

  • @PersistenceContext / @PersistenceUnit ,则选择主 EntityManagerFactory bean。

  • @Scheduled@Schedules 现在可以用作元注释来创建具有属性覆盖的自定义组合注释。
    任何范围的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 现在可以用作元注释来创建具有属性覆盖的自定义组合注释。

6.4 JMS改进

现在可以在类级别指定

  • @SendTo 以共享公共回复目标。

  • @JmsListener@JmsListeners 现在可以用作元注释来创建具有属性覆盖的自定义组合注释。

6.5 网站改进

  • 内置支持 HTTP HEAD and HTTP OPTIONS

  • @GetMapping@PostMapping@PutMapping@DeleteMapping@PatchMapping@RequestMapping 组成了注释。

  • 有关详细信息,请参阅 Composed @RequestMapping Variants

  • 新的 @RequestScope@SessionScope@ApplicationScope 组成了Web范围的注释。

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

  • @RestControllerAdvice 注释与 @ControllerAdvice@ResponseBody 语义相结合。

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

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

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

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

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

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

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

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

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

  • AsyncRestTemplate 支持请求拦截。

6.6 WebSocket消息传递改进

现在可以在类级别指定

  • @SendTo@SendToUser 来共享公共目标。

6.7 测试改进

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

  • SpringJUnit4ClassRunner 的新 SpringRunner 别名。

  • 现在可以在接口上声明与测试相关的注释 - 例如,与使用基于Java 8的接口默认方法的测试接口一起使用。

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

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

  • @BeforeTransaction@AfterTransaction 方法不再需要 public ,现在可以在基于Java 8的接口默认方法上声明。

  • Spring TestContext Framework中的 ApplicationContext 缓存现在受限于默认最大大小32和最近最少使用的驱逐策略。可以通过设置JVM系统属性或名为 spring.test.context.cache.maxSize 的Spring属性来配置最大大小。

  • 新的 ContextCustomizer API用于在将bean定义加载到上下文之后但在刷新上下文之前自定义测试 ApplicationContext 。定制程序可以由第三方在全球注册,但需要实现自定义 ContextLoader

  • @Sql@SqlGroup 现在可以用作元注释来创建具有属性覆盖的自定义组合注释。

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

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

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

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

  • 客户端REST测试支持允许指示预期请求的次数以及是否应忽略预期的声明顺序(请参阅 Section 15.6.3, “Client-Side REST Tests” )。

  • 客户端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(截至4.3 Spring ,最低加注到 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。

Updated at: 5 months ago
5.6. 测试改进Table of contentIII. 核心技术
Comment
You are not logged in.

There are no comments.