上一篇Spring学习-(1)SpringFramework官方文档翻译1
对Spring Framework 官方文档概述做了翻译,基本了解了一下Spring Framework是什么,本篇接着带着学习的心态对第二部分做简单的翻译。英文版请查考官方说明文档
3.Spring 4.0的新特性和增强功能
Spring最初发行于2004年,从那以后有过几次重大的修改,Spring 2.0提供了XML命名空间和AspectJ,Spring 2.5包含了注解驱动的配置,Spring 3.0以Java 5+为框架的代码基础,并使用其新特性,诸如以@Configuration
注解的模型等。
4.0版本是最近一次重大的修改,且首次全面支持Java 8的新特性。你仍然可以继续使用Java的旧版本,但是最低要求提升到了Java SE 6。我们也利用这次重大修改移除了很多过时的类和方法。
升级到Spring 4.0的指导手册参见Spring Framework GigHub Wiki。
3.1 改进了入门体验
新的spring.io网址提供了完整的入门指南帮你学习Spring。更多的指南请参考本文档的 1. Spring入门。新网址也提供了对发布在Spring下的许多项目的深入理解。
如果你是Maven用户,你可能会对现在发布在每个Spring版本中的物料清单POM文件感兴趣。
3.2 移除了过时的包和方法
4.0版本移除了所有过时的包以及许多过时的类和方法。如果从之前的版本升级过来,则需要保证修复所有对过时API的调用。
完整的改变请参考API Differences Report。
注意,可选的第三方依赖已经升级到2010/2011的版本(也就是说,Spring 4只支持发布在2010年之后的版本),尤其是,Hibernate 3.6+,EhCache 2.1+,Quartz 1.8+,Groovy 1.8+,Joda-Time 2.0+。有一个例外,Spring 4需要Hibernate Validator 4.3+和Jackson2.0+(Spring 3.2保留了对Jackson1.8/1.9的支持,但现在过时了)。
3.3 Java 8(以及6和7)
Spring 4.0对Java 8的几个新特性提供了支持,允许使用lambda表达式,在Spring回调接口中使用方法引用。对java.time(JSR-310)有很好地支持,把几个已存在的注解改造为@Repeatable,还可以使用java 8的参数名称发现作为替代方案来编译启用了调试信息的代码(基于-parameters的编译器标志,译者注:参数名称发现是通过反射获取参数的名称,而不是类型)。
Spring保留了对旧版本Java和JDK的兼容,具体地说是Java SE 6和更高版本都全面支持(最低JDK6.18,发布于2010年1月)。尽管如此,我们依然建议基于Spring 4的新项目使用Java 7或者8。
3.4 Java EE 6和7
Java EE 6+及其相关的JPA 2.0和Servlet 3.0,被认为是Spring 4的基线。为了兼容Google App Engine和旧的应用服务器,可能要在Servlet 2.5环境中部署Spring 4。然而,Servlet 3.0+是我们强烈推荐的,并且它也是Spring测试的先决条件,也是模拟软件包测试开发环境设置的先决条件
如果你是WebSphere 7用户,请一定要安装JPA 2.0包,如果是WebLogic 10.3.4或更高版本,还要安装JPA 2.0补丁,这样Spring 4才能兼容这两个服务器。
更有远见的主意,Spring 4.0现在支持Java EE 7适用的规范,尤其是JMS 2.0、JTA 1.2、JPA 2.1、Bean Validation 1.1和JSR-236 Concurrency Utilities。像往常一样,这种支持只针对个人的使用,比如在Tomcat或独立的环境中。尽管如此,当Spring应用部署在Java EE 7的服务器上依然运行良好。
注意,Hibernate 4.3是JPA 2.1的提供者,因此只在Spring 4.0中支持。同样地,Hibernate Validator 5.0是Bean Validation 1.1的提供者。因此,这两项并不被Spring 3.2官方支持。
3.5 Groovy Bean定义DSL
从Spring 4.0开始,可以使用Groovy DSL定义外部bean了。在概念上,这与使用XML配置bean类似,但是可以使用更简洁的语法。使用Groovy还可以很容易地把bean定义直接嵌入到引导代码中。例如:
def reader = new GroovyBeanDefinitionReader(myApplicationContext)
reader.beans {
dataSource(BasicDataSource) {
driverClassName = "org.hsqldb.jdbcDriver"
url = "jdbc:hsqldb:mem:grailsDB"
username = "sa"
password = ""
settings = [mynew:"setting"]
}
sessionFactory(SessionFactory) {
dataSource = dataSource
}
myService(MyService) {
nestedBean = { AnotherBean bean ->
dataSource = dataSource
}
}
}
更多信息请查阅GroovyBeanDefinitionReader
的javadocs。
3.6 核心容器的改进
核心容器有以下几点改进:
Spring注入Bean时把泛型当作一种限定符。例如,使用Spring的Repository
时,可以注入特定的实现:
@Autowired Repository
。
使用Spring的元注解,可以开发暴露特定属性的自定义注解。
Bean可以在被装配到list或数组中时排好序。通过@Order
注解和Ordered接口支持。
@Lazy
注解可以用于注入点,也可用于@Bean
定义上。
引入了@Description
注解以便开发者使用基于Java的配置。
通过@Conditional
注解可以定义有条件过滤的bean。这与@Profile
类似但允许用户自定义开发策略。
基于CGLIB的代理类不再需要默认的构造方法。通过objenesis库进行支持,它被重新打包到Spring中并作为Spring框架的一部分发布。使用这种策略,生成代理实例时没有构造方法将被调用。
添加了管理时区的支持。例如LocaleContext
。
3.7 Web的改进
保留了Servlet 2.5服务器的部署,但Spring 4.0现在主要关注Servlet 3.0+环境的部署。如果使用Spring MVC测试框架,需要保证在test classpath上包含Servlet 3.0的兼容JAR包。
除了下面要讲的WebSocket方面的支持,在Spring的Web模块还包含以下几点改进:
可以添加新的@RestController
注解到Spring MVC应用上,而不用再添加@ResponseBody
到每个@RequestMapping
方法上。
添加了AsyncRestTemplate类,当开发REST客户端时允许非阻塞异步支持。
当开发Spring MVC应用时提供了全面的时区支持。
3.8 WebSocket、SockJS 和STOMP Messaging
新的spring-websocket
模块全面支持在web应用中客户端与服务端基于WebSocket双向通信。它兼容JSR-356、Java WebSocket API,另外还提供了基于SockJS的后退选项(例如,WebSocket仿真)用于不支持WebSocket协议的浏览器(例如,IE < 10)。
新的spring-messaging
模块支持STOMP作为WebSocket的子协议与一个注解程序模型一起用于路由并处理来自WebSocket客户端的STOMP消息。因此,一个@Controller
可以同时包含@RequestMapping
和@MessageMapping
方法用于处理HTTP请求和来自WebSocket客户端的消息。新的spring-messaging
模块还包含从以前Spring集成项目提取出来的关键抽象作为基于消息处理的应用的基础,如Message
、MessageChannel
、MesaageHandler
等。
更详细的内容请参考 25 WebSocket支持 章节。
3.9 测试的改进
除了移除了spring-test模块过时的代码,Spring 4.0还引入了几个新特性用于单元测试和集成测试:
几乎spring-test模块的所有注解(例如,@ContextConfiguration
、@WebAppConfiguration
、@ContextHierarchy
、@ActiveProfiles
等)都可以作为元注解用于创建自定义注解并减少测试套件中的重复配置。
有效的bean定义配置文件可以通过编程解析,只要简单地实现自定义的ActiveProfilesResolver
并注册@ActiveProfiles
的resolver属性即可。
spring-core
模块引入了新的SocketUtils
类,用于扫描本地空闲的TCP和UDP服务端口。这项功能并不特定用于测试,但是当写需要socket的集成测试时非常有用,例如,启动内存中的SMTP服务器、FTP服务器、Servlet容器等的测试。
自Spring 4.0起,org.springframework.mock.web
包中模拟集合以Servlet 3.0为基础。此外,一些Servlet API模拟(例如,MockHttpServletRequest
,MockServletContext
等)有少许增强并可通过配置改进。
4. Spring 4.1的新特性和增强功能
4.1 JMS的改进
Spring 4.1引入了一个更简单的方法来注册JMS监听器,那就是使用@JmsListener
注解bean的方法。XML的命名空间也得到了增强以支持这项新特性(jms:annotation-driven
),也可以通过Java配置来完全使用这项新特性(@EnableJms
,JmsListenerContainerFactory
),还可以使用JmsListenerConfigurer
来编程式地注册监听器。
Spring 4.1还可以与4.0中引入的spring-messaging
合作使用:
消息监听器可以拥有更弹性的签名,并且可以受益于标准的消息处理注解,比如,@Payload
, @Header
, @Headers
, @SendTo
,等等,也可以使用标准的Message代替javax.jms.Message作为方法的参数。
新的JmsMessageOperation
接口可以被使用,并且允许JmsTemplate
像使用Message一样操作。
最后,Spring 4.1还提供了以下各种各样的改进:
JmsTemplate支持同步的请求应答操作。
每个
元素可以指定监听器的优先级。
通过BackOff
实现可以配置消息监听容器的恢复选项。
JMS 2.0支持共享消费者。
4.2 缓存的改进
Spring 4.1支持JCache(JSR-107)注解,直接使用Spring已存在的缓存配置和基础架构即可,不需要其它的改变。
Spring 4.1也极大地改进了它的缓存策略:
可以在运行时使用CacheResolver
解析缓存。因此,不再强制使用value参数来定义缓存的名称。
更多自定义的操作:缓存解析,缓存管理,键生成器。
新的@CacheConfig
注解允许通用设置在类级别共享,而不需要启用任何缓存操作。
使用CacheErrorHandler
更好地处理缓存的异常。
Spring 4.1还为了添加putIfAbsent
方法对CacheInterface
做了重大改变。
4.3 Web的改进
新的抽象ResourceResolver
, ResourceTransformer
和ResourceUrlProvider
扩展了已存在的基于ResourceHttpRequestHandler
的资源处理程序。一些内置的实现提供了对带版本的资源URL(为了有效的HTTP缓存)、定位gzip资源、生成HTML 5 AppCache清单等的支持。参考21.16.9 资源服务。
JDK 1.8的java.util.Optional
现在支持@RequestParam
, @RequestHeader
和@MatrixVariable
控制器方法的参数。
ListenableFuture
作为返回值替代了DeferredResult
,在这方面一项基础服务(或者说对AsyncRestTemplate的调用)已经返回了ListenableFuture
。
@ModelAttribute
方法现在按照依赖间的顺序依次被调用。
Jackson
的@JsonView
直接作用于@ResponseBody
和ResponseEntity
控制器方法,用于序列化同一个POJO的不同形式(比如,汇总和详情)。这可以通过为模型属性添加指定key的序列化视图类型来渲染视图。参考Jackson序列化视图支持。
Jackson现在支持JSONP。参考Jackson JSONP支持。
新的生命周期选项可用于在控制器方法返回后且响应写出前拦截@ResponseBody
和ResponseEntity
方法,声明一个@ControllerAdvice bean
实现ResponseBodyAdvice
即可,内置的@JsonView
和JSONP恰恰利用了这点。参考21.4.1 使用HandlerInterceptor
拦截请求。
有三个HttpMessageConverter
选项:
Gson——比Jackson更轻的足迹,已用于Spring Android中。
Google协议缓冲——企业内部有效的服务间通信数据协议,但是也可以作为JSON和XML暴露于浏览器中。
通过jackson-dataformat-xml扩展支持基于XML的Jackson。当使用@EnableWebMvc
或
时,如果classpath下存在jackson-dataformat-xml则默认会替代JAXB2。
类似JSP的视图现在可以通过引用控制器映射的名称与控制器建立链接。默认的名称将被赋给每一个@RequestMapping
。例如,FooController
拥有方法handleFoo
,它的名称为“FC#handleFoo”。命名策略是可插拔的,也可以通过name属性为@RequestMapping
明确地命名。在Spring JSP标签库中新的mvcUrl功能可以让使用JSP页面变得更方便。参考21.7.2 从视图为Controller及其方法创建URI。
ResponseEntity
提供了创建者风格的API用于引导控制器方法为服务端响应做准备。例如,ResponseEntity.ok()
。
RequestEntity
是一种新类型,它提供了创建者风格的API用于引导客户端REST代码为HTTP请求做准备。
MVC Java配置与XML命名空间:
视图解析器可以被配置,包含对内容协商的支持。参考21.16.8 视图解析器。
视图控制器内置了对重定向及设置响应状态的支持。应用程序可以使用它配置重定向的URL,用视图渲染 404 响应,发送“无内容”响应,等等。一些用例请点击这里。
内置了自定义的路径匹配。参考21.16.11 路径匹配。
支持Groovy标记模板(基于Groovy 2.3)。
参考GroovyMarkupConfigurer
和各自的ViewResolver
及视图实现 。
4.4 WebSocket 消息处理的改进
支持SockJS(Java)客户端。参考SockJsClient
和同包下的类。
当STOMP客户端订阅和取消订阅时新的应用上下文事件SessionSubscribeEvent
和SessionUnsubscribeEvent会被触发。
新的作用域“websocket”。
参考25.4.14 WebSocket作用域。
@SendToUser
只能把单会话作为目标,而且不需要用户身份验证。
@MessageMapping
方法可以使用点“.”代替斜杠“/”作为分割符。
参考SPR-11660。
STOMP/WebSocket监测信息收集和日志管理。
参考25.4.16 运行时监测。
得到极大优化和改进的日志管理保留了可读性和简洁性,甚至是在DEBUG水平。
优化了消息的创建,包含了对临时消息可变性的支持,并避免自动消息id和时间戳的创建。参考Javadoc中的MessageHeaderAccessor
。
在WebSocket会话创建60秒后没有活动则将会关闭STOMP/WebSocket连接。参考SPR-11884。
4.5 测试的改进
Groovy脚本现在可用于配置ApplicationContext
,其中ApplicationContext
在测试上下文框架中被加载用于集成测试。
参考带有Groovy脚本的上下文配置。
在事务测试方法中可以通过TestTransaction
API编程式地开始和结束测试事务。
参考编程式事务管理。
SQL脚本执行可以通过在每个类或方法上添加新的@Sql
和@SqlConfig
注解声明式地配置。
参考14.5.7执行SQL脚本。
可以通过新的@TestPropertySource
注解配置用于测试的property源文件,它能够自动地重写系统和应用的property源文件。
参考带有测试property源文件的上下文配置。
默认的TestExecutionListeners
能够被自动地发现。
参考自动发现默认的TestExecutionListeners。
自定义的TestExecutionListeners
能够被自动地合并到默认的监听器中。
参考合并TestExecutionListeners。
测试上下文框架中事务测试的文档提供了更多深入的解释和附加的案例。
参考14.5.6 事务管理。
对MockServletContext
, MockHttpServletRequest
和其它Servlet API模拟的各种各样的改进。
AssertThrows
被重构了用于支持Throwable
而不是Exception
。
在Spring MVC测试中,JSON Assert作为使用JSONPath的额外选项,可以为JSON响应断言,这就像使用XMLUnit
为XML断言一样。
可以通过MockMvcConfigurer
创建MockMvcBuilder
。这使得应用Spring安全设置变得很容易,也可用于把通用设置压缩进任何第三方框架或项目中。
MockRestServiceServer
现在支持AsyncRestTemplate
用于客户端测试。
5. Spring 4.2的新特性和增强功能
5.1 核心容器的改进
类似@Bean
的注解被发现并用于处理Java 8的默认方法,允许实现接口的配置类带有默认的@Bean
方法。(译者注:@Bean
注解可以用到Java 8接口的默认方法上,然后配置类实现这个接口一样可以得到bean)
配置类现在可以声明@Import
引入普通的组件类了,允许混合引入配置类和组件类。(译者注:@Import
以前只能引入配置类,现在也可以引入没有任何注解的组件类)
配置类可以声明一个@Order
值,按照一定的顺序处理(比如,按名称重写bean),甚至是在classpath扫描的时候。(译者注:@Order
值大的会覆盖小的)
@Resource
注入的元素支持@Lazy
声明,像@Autowired
一样,对请求目标的bean接受延迟初始化的代理。
应用程序事件现在提供基于注解的模型了,也可以发布任何事件。
bean中的任何公共方法都能够通过@EventListener
注解来消费事件。
@TransactionalEventListener
提供了事务绑定的事件支持。
Spring 4.2提供了一流的支持用于声明和查找注解属性的别名。新的@AliasFor
注解可以用来在单个注解内声明一对别名属性,或者声明一个从自定义注解属性到元注解属性的别名。
以下注解都通过@AliasFor
翻新过了,以便为value属性提供更有意义的别名:@Cacheable,
@CacheEvict
, @CachePut
, @ComponentScan
, @ComponentScan.Filter
, @ImportResource
, @Scope
, @ManagedResource
, @Header
, @Payload
, @SendToUser
, @ActiveProfiles
, @ContextConfiguration
, @Sql
, @TestExecutionListeners
, @TestPropertySource
, @Transactional
, @ControllerAdvice
, @CookieValue
, @CrossOrigin
, @MatrixVariable
, @RequestHeader
, @RequestMapping
, @RequestParam
, @RequestPart
, @ResponseStatus
, @SessionAttributes
, @ActionMapping
, @RenderMapping
, @EventListener
, @TransactionalEventListener
。
例如,来自spring-test
模块的@ContextConfiguration
现在定义如下:
public @interface ContextConfiguration {
@AliasFor("locations")
String[] value() default {};
@AliasFor("value")
String[] locations() default {};
// ...
}
类似地,重写了元注解属性的注解现在也可以使用@AliasFor
细粒度地控制那些在注解层次结构中被重写的属性。实际上,现在可以为元注解的value属性声明一个别名。
例如,现在可以像下面一样开发一种重写了自定义属性的组合注解。
@ContextConfiguration
public @interface MyTestConfig {
@AliasFor(annotation = ContextConfiguration.class, attribute = "value")
String[] xmlFiles();
// ...
}
参考spring注解编程模型
Spring在发现元注解的搜索算法上做了很多改进。例如,在注解继承体系中可以声明局部的组合注解。
重写了元注解属性的组合注解现在可以用在接口、抽象类、桥接和接口方法上,也可以用在类、标准方法、构造方法和字段上。
代表注解属性的Map(和AnnotationsAttributes
实例)可以被合成(或者转换)到一个注解中。
基于字段的数据绑定(DirectFieldAccessor
)可以与当前基于属性的数据绑定(BeanWrapper
)一起使用。特别地,基于字段的绑定现在支持为集合、数据和Map导航。
DefaultConversionService
为Steam
、Charset
、Currency
和TimeZone
提供了可以直接使用的转换器。这些转换器也可以被添加到任意的ConversionService
中。
DefaultFormattingConversionService
为JSR-354中的货币提供了支持(如果javax.money存在于classpath下),即MonetaryAmount
和CurrencyUnit
。这也包含对@NumberFormat的支持。
@NumberFormat
现在可以作为元注解使用。
JavaMailSenderImpl
有一个新的方法testConnection()
用于检查与服务器间的连接。
ScheduledTaskRegistrar
暴露计划的任务。
Apache的commons-pool2现在支持AOP池CommonsPool2TargetSource
。
为脚本化bean引入了StandardScriptFactory
作为一个基于JSR-223的机制,暴露于XML中的lang:std
元素。对JavaScript和JRuby的支持。(注意:JRubyScriptFactory
和lang:jruby
现在过时了,请使用JSR-223)
5.2 数据访问的改进
AspectJ现在支持javax.transactional.Transactional
。
SimpleJdbcCallOperations
现在支持命名绑定。
全面支持Hibernate ORM 5.0,作为JPA提供者(自动适配),也支持其原生API(被新的org.springframework.orm.hibernate5包覆盖)。
嵌入的数据库现在可以被自动赋值不同的(unique)名字,且
支持新的属性database-name。参考下面的“测试的改进”部分。
5.3 JMS的改进
autoStartup
属性可以通过JmsListenerContainerFactory
控制。
每个监听器容器都能配置应答Destination
的类型。
@SendTo
注解的值现在可以使用SpEL表达式。
响应目标可以使用JmsResponse
在运行时计算。
@JmsListener
是一个可重复性的注解,可以在同一个方法上声明多个JMS容器(如果你还没有使用Java 8,请使用新引入的@JmsListeners
)。
5.4 Web的改进
支持HTTP流和服务器发送事件。参考HTTP流。
支持内置CORS的全局(MVC Java配置和XML命名空间)和局部(例如,@CrossOrign
)配置。
参考26 CORS支持。
HTTP缓存更新:
新的创建者CacheControl
,嵌入到ResponseEntity
, WebContentGenerator
, ResourceHttpRequestHandler
中。
在WebRequest
中改进了ETag/Last-Modified的支持。
自定义映射注解,使用@RequestMapping
作为元注解。
AbstractHandlerMethodMapping
中的公共方法用于在运行时注册和取消注册请求映射。
AbstractDispatcherServletInitializer
中的保护方法createDispatcherServlet
进一步自定义DispatcherServlet
的实例。
HandlerMethod
作为@ExceptionHandler
方法的参数,特别在@ControllerAdvice
组件中非常便利。
java.util.concurrent.CompletableFuture
作为@Controller
方法的返回类型。
HttpHeaders
支持字节范围的请求,并提供静态资源。
@ResponseStatus
检测嵌套异常。
RestTemplate
中的UriTemplateHandler
扩展点。
DefaultUriTemplateHandler
暴露了baseUrl属性和路径段编码选项。
此扩展点可嵌入到URI模板库中。
OkHTTP与RestTemplate
集成。
自定义的baseUrl可以替代MvcUriComponentsBuilder
中的方法。
序列化/反序列化的异常信息在WARN级别被记录。
默认的JSON前缀从“{}&&”改成了更安全的”)]}’,”中的一个(译者注:此处可能官方文档有误)。
新的扩展点RequestBodyAdvice
和内置实现支持@RequestBody
方法参数上的Jackson的@JsonView
。
使用GSON或Jackson 2.6+时,处理器方法的返回类型被用于改进参数化类型的序列化,比如List
。
引入了ScriptTemplateView
作为JSR-223用于处理脚本web视图的机制,主要关注于Nashorn(JDK 8)上的JavaScript视图模板。
5.5 WebSocket消息处理的改进
暴露关于已连接用户和订阅存在的信息。
新的SimpUserRegistry
暴露为叫作“userRegistry”的bean。
在服务器集群间共享已存在的信息(参考代理中继配置选项)。
解决用户在服务器集群中的目的地(参考代理中继配置选项)。
StompSubProtocolErrorHandler
扩展点用来定制和控制STOMP错误帧到客户端。
通过@ControllerAdvice
组件声明的全局方法@MessageExceptionHandler
。
SpEL表达式“selector”头用于SimpleBrokerMessageHandler
的订阅。
通过TCP和WebSocket使用STOMP客户端。
参考25.4.13 STOMP客户端。
@SendTo
和@SendToUser
可以包含多个占位符。
Jackson的@JsonView
支持在@MessageMapping
和@SubscribeMapping
方法上返回值。
ListenableFuture
和CompletableFuture
可以作为@MessageMapping
和@SubscribeMapping
方法的返回值类型。
MarshallingMessageConverter
用于XML负载。
5.6 测试的改进
基于JUnit的集成测试现在可以使用JUnit规则执行而不是SpringJUnit4ClassRunner
。这使得基于Spring的集成测试可以使用替代runner运行,比如JUnit的Parameterized
或第三方的runner如MockitoJUnitRunner
。
参考Spring JUnit规则。
Spring MVC测试框架现在对HtmlUnit提供了一流的支持,包括集成Selenium的WebDriver,允许基于页面的web应用测试不再需要部署到一个Servlet容器上。
参考14.6.2, HtmlUnit的集成。
AopTestUtils是一个新的测试工具类,它允许开发者可以获取到底层的隐藏在一个或多个Spring代理类下的目标对象。
参考13.2.1 通用测试工具类。
ReflectionTestUtils现在支持为static字段设值和取值,包括常量。
通过@ActiveProfiles
声明的bean定义配置文件的原始顺序现在保留了,这是为了使用一些案例,比如Spring Boot的ConfigFileApplicationListener
,它通过有效的名称来加载配置文件。
@DirtiesContext
现在支持新的模式BEFORE_METHOD
, BEFORE_CLASS
和BEFORE_EACH_TEST_METHOD
用于在测试之前关闭ApplicationContext
——例如,在大型测试套件中的一些劣质的测试毁坏了对ApplicationContext
的原始配置。
@Commit
这个新注解可以直接替代@Rollback(false)
。
@Rollback
现在可以用来配置类级别默认的回滚语义。
因此,@TransactionConfiguration
现在过时了,并且会在后续版本中移除。
通过statements这个新的属性@Sql
现在支持内联SQL语句的执行。
用于在测试期间缓存应用上下文的ContextCache
现在是公共的API,它有默认的实现,可以替代自定义的缓存需求。
DefaultTestContext
, DefaultBootstrapContext
和DefaultCacheAwareContextLoaderDelegate
现在是support子包下的公共类,允许自定义扩展。
TestContextBootstrappers
现在负责创建TestContext
。
在Spring MVC测试框架中,MvcResult
的详细日志现在可以在DEBUG级别被打印,或者写出到自定义的OutputStream
或Writer中。参考MockMvcResultHanlder
中的新方法log()
, print(OutputStream)
和print(Writer)
。
JDBC XML的命名空间支持一个新的属性database-name,位于
中,允许开发者为嵌入的数据库设置不同的名字——例如,通过SpEl表达式或者被当前 有效bean定义 配置文件 影响的属性文件占位符。
嵌入的数据库现在可以被自动赋予不同的名字,允许在同一测试套件不同的应用上下文中重复使用通用的测试数据库配置。
参考18.8.6 为嵌入的数据库生成不同的名字。
MockHttpServletRequest
和MockHttpServletResponse
现在通过getDateHeader
和setDateHeader
方法提供了更好的支持用于格式化日期头。