Spring 4.1引入了一个更简单的基础架构,使用 @JmsListener注解bean方法来注册JMS监听端点。XML命名空间已经通过增强来支持这种新的方式(jms:annotation-driven),它也可以完全通过Java配置( @EnableJms,
JmsListenerContainerFactory)来配置架构。也可以使用 JmsListenerConfigurer注解来注册监听端点。
Spring 4.1还调整了JMS的支持,使得你可以从spring-messaging在Spring4.0引入的抽象获益,即:
@Payload、@Header、@Headers和@SendTo注解。另外,也可以使用一个标准的消息,以代替javax.jms.Message作为方法参数。
JmsMessageOperations接口和允许操作使用Message抽象的JmsTemplate。
最后,Spring 4.1提供了其他各种各样的改进:
<jms:listener/>元素
BackOff 实现进行配置
Spring 4.1 支持JCache (JSR-107)注解使用Spring的现有缓存配置和基础结构的抽象;使用标准注解不需要任何更改。
Spring 4.1也大大提高了自己的缓存抽象:
CacheResolver解决。因此使用value参数定义的缓存名称不在是强制性的。
@CacheConfig类级别注解允许在类级别上共享常用配置,不需要启用任何缓存操作。
CacheErrorHandler更好的处理缓存方法的异常
Spring 4.1为了在CacheInterface添加一个新的putIfAbsent方法也做了重大的更改。
ResourceHttpRequestHandler
has been expanded with new abstractions ResourceResolver, ResourceTransformer,
and ResourceUrlProvider. A number of built-in implementations provide support
for versioned resource URLs (for effective HTTP caching), locating gzipped resources,
generating an HTML 5 AppCache manifests, and more. See Section 16.16.7, “资源服务”.
java.util.Optional is now supported for @RequestParam, @RequestHeader,
and @MatrixVariable controller method arguments.
ListenableFuture is supported as a return value alternative to DeferredResult
where an underlying service (or perhaps a call to AsyncRestTemplate) already
returns ListenableFuture.
@ModelAttribute methods are now invoked in an order that respects inter-dependencies.
See SPR-6299.
@JsonView is supported directly on @ResponseBody and ResponseEntity
controller methods for serializing different amounts of detail for the same POJO (e.g.
summary vs. detail page). This is also supported with View-based rendering by
adding the serialization view type as a model attribute under a special key.
See the section called “支持 Jackson 序列化视图” for details.
@ResponseBody and ResponseEntity
methods just after the controller method returns and before the response is written.
To take advantage declare an @ControllerAdvice bean that implements ResponseBodyAdvice.
The built-in support for @JsonView and JSONP take advantage of this.
See Section 16.4.1, “使用 HandlerInterceptor 拦截请求”.
There are three new HttpMessageConverter options:
@EnableWebMvc or <mvc:annotation-driven/>, this is used by default
instead of JAXB2 if jackson-dataformat-xml is in the classpath.
@RequestMapping. For example FooController
with method handleFoo is named "FC#handleFoo". The naming strategy is pluggable.
It is also possible to name an @RequestMapping explicitly through its name attribute.
A new mvcUrl function in the Spring JSP tag library makes this easy to use in JSP pages.
See Section 16.7.2, “Building URIs to Controllers and methods from views”.
ResponseEntity provides a builder-style API to guide controller methods
towards the preparation of server-side responses, e.g. ResponseEntity.ok().
RequestEntity is a new type that provides a builder-style API to guide client-side REST
code towards the preparation of HTTP requests.
MVC Java config and XML namespace:
GroovyMarkupConfigurer and respecitve
ViewResolver and ‘View’ implementations.
SockJsClient and classes in same package.
SessionSubscribeEvent and SessionUnubscribeEvent published
when STOMP clients subscribe and unsubscribe.
@SendToUser can target only a single session and does not require an authenticated user.
@MessageMapping methods can use dot "." instead of slash "/" as path separator.
See SPR-11660.
MessageHeaderAccessor.
Groovy scripts can now be used to configure the ApplicationContext loaded for
integration tests in the TestContext framework.
Test-managed transactions can now be programmatically started and ended within
transactional test methods via the new TestTransaction API.
SQL script execution can now be configured declaratively via the new @Sql and
@SqlConfig annotations on a per-class or per-method basis.
Test property sources which automatically override system and application property
sources can be configured via the new @TestPropertySource annotation.
Default TestExecutionListeners can now be automatically discovered.
Custom TestExecutionListeners can now be automatically merged with the default
listeners.
The documentation for transactional testing support in the TestContext framework has been improved with more thorough explanations and additional examples.
MockServletContext, MockHttpServletRequest, and other
Servlet API mocks.
AssertThrows has been refactored to support Throwable instead of Exception.
MockMvcBuilder recipes can now be created with the help of MockMvcConfigurer. This
was added to make it easy to apply Spring Security setup but can be used to encapsulate
common setup for any 3rd party framework or within a project.
MockRestServiceServer now supports the AsyncRestTemplate for client-side testing.