Spring 4.x框架中的新特性---4.1中的新功能和提升

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. 每个<jms:listener/>元素可以指定监听优先级;

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或<mvc:annotation-driven/>时,如果jackson-dataformat-xml在类路径中,那么在默认的情况下它会被用于替代JAB2。

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。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值