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 TestExecutionListener
s can now be automatically discovered.
Custom TestExecutionListener
s 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.