JMS的改善
Spring4.1通过引入带有@JmsListener注解的bean方法给注册JMS监听端点提供一个更加简单的基础设施。XML命名空间已经被增强,以便支持这种新的样式(jms:annotation-driven),并它还可以使用Java配置(@EnableJms、JmsListenerContainerFactory)来配置这个基础设施,也可以使用JmsListenerConfigurer方法通过编程来注册监听端点。
Spring4.1继续支持JMS,同时还可以获取从4.0开始引入的spring-messaging抽取的好处:
1. 消息监听器端点可以有更加灵活的签名,以及来自诸如@Payload、@Header、@Headers和@SendTo等标准消息注解的好处。它还可以使用标准的Message来代替javax.jms.Message作为方法的参数;
2. 新的JmsMessageOperations接口是可用的,并且允许像使用Message抽象的操作一样使用JmsTemplate。
最后,Spring4.1还提供了一些其他方面的改善:
1. 支持JmsTemplate中的同步请求---响应操作;
2. 每个
3. 消息监听容器的回复选项时可配置的,它是使用BackOff算法来实现的;
4. JMS2.0支持共享消费。
缓存的改善
Spring4.1使用Spring既存的缓存配置和基础抽象来支持JCache(JSR-107)注解,它使用标准的注解,不需要改变。
Spring4.1还显著的改善了它自己的缓存抽象:
1. 使用CacheResolver可以在运行时分解缓存。不再强制使用缓存名称来定义结果值的参数。
2. 更多的自定义操作级别:cache resolver、cache manager、key generator。
3. 新的@CacheConfig类级别注解允许在类的层级上共享常用的设置,而不需启用任何缓存操作;
4. 使用CacheErrorHandler方法来进行更好的缓存异常处理。
Spring4.1在CacheInterface接口中还有一个突破性的改变,就是添加了一个新的putIfAbsent方法。
Web方面的改善
1. 现存的基于ResourceHttpRequestHandler类的资源处理方式已经被新的抽象类ResourceResolver、Resourcetransformer、ResourceUrlProvider所扩展。很多内置的实现提供了版本化的资源URLs(有效的HTTP缓存)、定位gzip压缩资源、生成HTML5应用缓存清单等支持,详细请阅读资源服务
2. 目前JDK1.8的java.util.Optional包支持@RequestParam、@RequestHeader和@matrixVariable注解样式的控制器方法参数。
3. 用ListenableFuture作为返回值来替代DeferredResult,在底层的服务(或者叫AsyncRestTemplate)已经返回ListenableFuture对象。
4. 按照内部相关的依赖顺序调用@ModelAttribute方法,详细请看SPR-6299。
5. 为了系列化相同POJO对象的不同数量的细节信息,在@ResponseBody和ResponseEntity控制器方法上直接支持Jackson的@JsonView,这种方法还可以通过把系列化的View类型作为模板属性添加到一个指定的键下来支持基于View的渲染。详细信息请看“支持Jackson系列化视图”。
6. 使用Jackson来支持JSONP。详细请看“支持JackSonJSONP”。
7. 用一个新的生命周期选项在响应被写入之前或之后来拦截@ResponseBody和responseEntity方法。这个生命周期选项利用声明一个@ControllerAdvice bean来实现ResponseBodyAdvice。这样做的好处是内置了对@JsonView和JSONP的支持。详细请看“用HandlerInterceptor来拦截请求”。
8. 有三种可选的新的HttpMessageConverter:
A. Gson---比Jackson更轻量级,已经在Spring的Android版本中使用;
B. GoogleProtocol Buffers---高效的企业级应用内部服务间通信的数据协议,但是它也能够作为JSON和XML暴露给浏览器;
通过jackson-dataformat-xml扩展支持基于XML系列化的Jackson,在使用@EnableWebMvc或
9. 诸如JSP的View能够通过引用控制映射的名称来建立控制器的链路。默认名称是跟每个@RequestMapping匹配。例如支持方法handleFoo的FooController被命名为“FC#handleFoo”。这种命名策略是可插拔的。它也可能通过它的名称属性来显示的命名一个@RequestMapping。在Spring的JSP标签库中有一个新的mvcUrl函数,它会让这种机制方便的应用到JSP页中。详细的请看第21.7.2,“从View中建立指向控制和方法的URI”。
10. ResponseEntity提供了一个构造器样式的API把控制器方法引导到服务端的响应操作,如ResponseEntity.ok()。
11. RequestEntity是一种新的提供了构造器样式API的类型,它把客户端的REST代码引导到HTTP请求的操作。
12. MVC的Java配置和XML命名空间:
可以配置的View解析器包括了对内容协商的支持,详细请看第26.16.8,“View解析器”。
View控制器内置了对重定向和设置相应状态的支持,应用程序可以使用这个特性来配置重定向的URL,提供用于响应404错误的View,发送没有内容的响应等。使用案例请看这里。
13. 支持Groovy标记模板(基于Groovy2.3)。详细请看GroovyMarkupConfigurer类、各自的ViewResolver和View实现。
WebSocket消息方面的改善
1. 在客户端支持SockJS方面的支持,请看SockJsClient类以及该类程序包中的其他类;
2. 新的应用上下文事件SessionSubscribeEvent和SessionUnscribeEvent用于发布STOMP客户端订阅和退订的时机;
3. 新的WebSocket的作用域,详细请看25.4.14,“WebSocket的作用域”;
4. @SendToUser能够只把一个单独的会话作为目标,而且不需要授权用户;
5. @MessageMapping方法可以使用”.”来代替”/”作为路径分割符,详细请看SPR-11660;
6. STOMP/WebSocket监控信息的收集和记录。详细请看25.4.16,“运行时监控”;
7. 显著的优化和改善了日志功能 ,它依然保留了非常好的可读性和简洁的DEBUG级别事件。
8. 优化了消息创建机制,包括对易变的临时消息、撤回自动消息id以及时间戳的创建的支持。详细请看MessageHeaderAccessor类的Javadoc.
9. WebSockket会话建立后,如果60秒内没有活动,则会关闭STOMP/WebSocket连接。
测试方面的改善
1. 在用于集成的TestContext框架中,现在可以用Groovy脚本来加载ApplicationContext配置,详细请看“使用Groovy脚本的上下文配置”。
2. 在事务性的测试方法中通过新的TestTransaction类的API以编程启动和结束的方式来管理事务。详细请看“程序的事务管理”。
3. 通过新的@Sql和@SqlConfig注解在每个类或方法上声明可以执行的SQL脚本配置。详细请看“执行SQL脚本”。
4. 通过新的@TestPropertySorce注解可以配置自动重写系统和应用程序属性源的测试属性源。详细请看“用于测试属性源的上下文配置”。
5. 自动发现默认的TestExecutionListeners,详细请看“自动发现默认的TestExecutionListeners”;
6. 自定义的TestExecutionListeners可以自动的跟默认的监听器合并,详细请看“合并TestExecutionListeners”。
7. 在TestContext框架中支持的事务测试的文档解释的更加深入,并添加了一些示例,详细请看“事务管理”。
8. 对MockServletContext、MockHttpServletRequest和其他的Servlet 仿真API做了大量的改善。
9. AssertThrows已经被重构来支持Throwable,而不是Exception
10. 在Spring MVC的测试框架中,可以把JSON Assert做为一个额外的选项可以断言JSON的响应,使用JSONPath的这个选项非常像带有XMLUnit测试能力的XML所做的事情。
11.MockMvcBuilder的清单可以在MockMvcConfigurer的帮助下来创建。增加了这种方式使得它可以更加容易的申请到Sring的安全设置,而且也可以为第三方的框架或工程内部封装通用的设置。
12.MockRestServiceServer现在支持用于客户端测试的AsyncRestTemplate。