On this page
4. Spring Framework 4.1 中的新功能和增强功能
4.1 版包括许多改进,如以下各节所述:
4.1 JMS 改进
Spring 4.1 通过使用@JmsListenerCommentsbean 方法,引入了一个更简单的基础结构注册 JMS 侦听器端点。 XML 名称空间已得到增强,以支持此新样式(jms:annotation-driven
),并且还可以使用 Java config(@EnableJms,JmsListenerContainerFactory
)完全配置基础结构。也可以使用JmsListenerConfigurer以编程方式注册侦听器端点。
Spring 4.1 还调整了其对 JMS 的支持,使您可以从 4.0 中引入的spring-messaging
抽象中受益,即:
消息侦听器端点可以具有更灵活的签名,并可以从诸如
@Payload
,@Header
,@Headers
和@SendTo
之类的标准消息 Comments 中受益。也可以使用标准Message
代替javax.jms.Message
作为方法参数。一个新的JmsMessageOperations接口可用,并允许使用
Message
抽象进行JmsTemplate
类似的操作。
最后,Spring 4.1 提供了其他一些其他改进:
JmsTemplate
中支持同步请求-答复操作可以按
<jms:listener/>
元素指定侦听器优先级可以使用BackOff实现来配置消息侦听器容器的恢复选项
支持 JMS 2.0 共享使用者
4.2 缓存改进
Spring 4.1 使用 Spring 现有的缓存配置和基础架构抽象来支持JCache(JSR-107)注解。使用标准 Comments 无需进行任何更改。
Spring 4.1 还大大改善了自己的缓存抽象:
可以在运行时使用CacheResolver解析缓存。结果,定义要使用的缓存名称的
value
参数不再是必需的。更多操作级别的自定义项:缓存解析器,缓存 Management 器,密钥生成器
新的@CacheConfig 类级 Comments允许在类级别共享通用设置,而无需启用任何缓存操作。
使用
CacheErrorHandler
更好地处理缓存方法的异常
由于添加了新的putIfAbsent
方法,Spring 4.1 的Cache
界面也发生了重大变化。
4.3 Web 改进
基于
ResourceHttpRequestHandler
的资源处理的现有支持已扩展为新的抽象ResourceResolver
,ResourceTransformer
和ResourceUrlProvider
。许多内置实现提供对版本化资源 URL(用于有效的 HTTP 缓存),定位压缩后的资源,生成 HTML 5 AppCacheLists 等的支持。参见第 22.16.9 节“资源服务”。@RequestParam
,@RequestHeader
和@MatrixVariable
控制器方法参数现在支持 JDK 1.8 的java.util.Optional
。支持
ListenableFuture
作为DeferredResult
的返回值替代,其中基础服务(或对AsyncRestTemplate
的调用)已经返回ListenableFuture
。现在按尊重相互依赖关系的 Sequences 调用
@ModelAttribute
方法。参见SPR-6299。@ResponseBody
和ResponseEntity
控制器方法直接支持 Jackson 的@JsonView
,用于序列化同一 POJO 的不同数量的细节(例如,摘要页面与细节页面)。通过将序列化视图类型添加为特殊键下的模型属性,基于视图的渲染也支持此功能。有关详情,请参见名为“ Jackson 序列化视图支持”的部分。Jackson 现在支持 JSONP。参见名为“ Jackson JSONP 支持”的部分。
在控制器方法返回之后和写入响应之前,可以使用新的生命周期选项来拦截
@ResponseBody
和ResponseEntity
方法。要利用这个优势,请声明一个实现ResponseBodyAdvice
的@ControllerAdvice
bean。对@JsonView
和 JSONP 的内置支持利用了这一点。参见第 22.4.1 节“使用 HandlerInterceptor 拦截请求”。新增了三个
HttpMessageConverter
选项:格森(Gson)-比 Jackson(Jackson)足迹更轻;已在 Spring Android 中使用。
Google Protocol Buffers –高效,有效地用作企业内部的服务间通信数据协议,但也可以作为 JSON 和 XML 公开给浏览器。
现在,通过jackson-dataformat-xml扩展支持基于 Jackson 的 XML 序列化。当使用
@EnableWebMvc
或<mvc:annotation-driven/>
时,如果jackson-dataformat-xml
在 Classpath 中,则默认使用它而不是 JAXB2.
现在,诸如 JSP 之类的视图可以通过按名称引用控制器 Map 来构建到控制器的链接。默认名称将分配给每个
@RequestMapping
。例如,使用方法handleFoo
的FooController
被命名为“ FC#handleFoo”。命名策略是可插入的。也可以通过其_name 属性显式命名@RequestMapping
。 Spring JSP 标记库中的新mvcUrl
函数使此功能易于在 JSP 页面中使用。参见第 22.7.3 节“从视图为控制器和方法构建 URI”。ResponseEntity
提供了一个构建器样式的 API,可指导控制器方法准备服务器端响应,例如ResponseEntity.ok()
。RequestEntity
是一种新类型,它提供了一个生成器样式的 API,以指导 Client 端 REST 代码编写 HTTP 请求。MVC Java 配置和 XML 名称空间:
现在可以配置视图解析器,包括对内容协商的支持,请参阅第 22.16.8 节“视图解析器”。
View Controller 现在具有对重定向和设置响应状态的内置支持。应用程序可以使用它来配置重定向 URL,使用视图呈现 404 响应,发送“无内容”响应等。一些用例是listed here。
路径匹配自定义是常用的,现在已内置。参见第 22.16.11 节,“路径匹配”。
Groovy 标记模板支持(基于 Groovy 2.3)。请参见
GroovyMarkupConfigurer
并指定ViewResolver
和`View'实现。
4.4 WebSocket 消息传递的改进
SockJS(Java)Client 端支持。参见
SockJsClient
和同一包中的类。当 STOMPClient 端订阅和取消订阅时,将发布新的应用程序上下文事件
SessionSubscribeEvent
和SessionUnsubscribeEvent
。新的“ websocket”作用域。参见第 26.4.16 节,“ WebSocket 范围”。
@SendToUser
只能定位单个会话,并且不需要经过身份验证的用户。@MessageMapping
方法可以使用点“。”而不是使用斜杠“ /”作为路径分隔符。参见SPR-11660。收集并记录了 STOMP/WebSocket 监视信息。参见第 26.4.18 节,“监视”。
显着优化和改进的日志记录,即使在 DEBUG 级别也应保持可读性和紧凑性。
优化的消息创建,包括对临时消息可变性的支持,并避免自动创建消息 ID 和时间戳。参见
MessageHeaderAccessor
的 Javadoc。构建 WebSocket 会话后 60 秒内,关闭没有活动的 STOMP/WebSocket 连接。参见SPR-11884。
4.5 测试改进
Groovy 脚本现在可以用于配置为 TestContext 框架中的集成测试加载的
ApplicationContext
。有关详情,请参见名为“使用 Groovy 脚本进行上下文配置”的部分。
现在,可以通过新的
TestTransaction
API 以编程方式在事务测试方法中开始和结束测试 Management 的事务。有关详情,请参见名为“程序化 TransactionManagement”的部分。
现在,可以基于每个类或每个方法通过新的
@Sql
和@SqlConfig
注解声明性地配置 SQL 脚本执行。有关详情,请参见第 15.5.8 节“执行 SQL 脚本”。
可以通过新的
@TestPropertySource
Comments 配置自动覆盖系统和应用程序属性源的测试属性源。有关详情,请参见名为“具有测试属性源的上下文配置”的部分。
现在可以自动发现默认的
TestExecutionListener
。现在可以将自定义
TestExecutionListener
自动与默认侦听器合并。有关详情,请参见称为“合并 TestExecutionListeners”的部分。
通过更详尽的解释和更多示例,对 TestContext 框架中的事务测试支持文档进行了改进。
有关详情,请参见第 15.5.7 节“事务 Management”。
MockServletContext
,MockHttpServletRequest
和其他 Servlet API 模拟的各种改进。AssertThrows
已重构为支持Throwable
而不是Exception
。在 Spring MVC Test 中,可以使用JSON Assert来声明 JSON 响应,这是使用 JSONPath 的额外选项,就像使用 XMLUnit 对 XML 进行处理一样。
现在可以在
MockMvcConfigurer
的帮助下创建MockMvcBuilder
食谱。添加它是为了使应用 Spring Security 设置变得容易,但可以用于封装任何第三方框架或项目内的通用设置。MockRestServiceServer
现在支持AsyncRestTemplate
进行 Client 端测试。