SpringFramework学习-(1)SpringFramework官方文档翻译2
2017-12-26 10:45
465 查看
上一篇Spring学习-(1)SpringFramework官方文档翻译1
对Spring Framework 官方文档概述做了翻译,基本了解了一下Spring Framework是什么,本篇接着带着学习的心态对第二部分做简单的翻译。英文版请查考官方说明文档
Spring最初发行于2004年,从那以后有过几次重大的修改,Spring 2.0提供了XML命名空间和AspectJ,Spring 2.5包含了注解驱动的配置,Spring 3.0以Java 5+为框架的代码基础,并使用其新特性,诸如以
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定义直接嵌入到引导代码中。例如:
更多信息请查阅
3.6 核心容器的改进
核心容器有以下几点改进:
Spring注入Bean时把泛型当作一种限定符。例如,使用Spring的
使用Spring的元注解,可以开发暴露特定属性的自定义注解。
Bean可以在被装配到list或数组中时排好序。通过
引入了
通过
基于CGLIB的代理类不再需要默认的构造方法。通过objenesis库进行支持,它被重新打包到Spring中并作为Spring框架的一部分发布。使用这种策略,生成代理实例时没有构造方法将被调用。
添加了管理时区的支持。例如
3.7 Web的改进
保留了Servlet 2.5服务器的部署,但Spring 4.0现在主要关注Servlet 3.0+环境的部署。如果使用Spring MVC测试框架,需要保证在test classpath上包含Servlet 3.0的兼容JAR包。
除了下面要讲的WebSocket方面的支持,在Spring的Web模块还包含以下几点改进:
可以添加新的
添加了AsyncRestTemplate类,当开发REST客户端时允许非阻塞异步支持。
当开发Spring MVC应用时提供了全面的时区支持。
3.8 WebSocket、SockJS 和STOMP Messaging
新的
新的
更详细的内容请参考 25 WebSocket支持 章节。
3.9 测试的改进
除了移除了spring-test模块过时的代码,Spring 4.0还引入了几个新特性用于单元测试和集成测试:
几乎spring-test模块的所有注解(例如,
有效的bean定义配置文件可以通过编程解析,只要简单地实现自定义的
自Spring 4.0起,
4. Spring 4.1的新特性和增强功能
4.1 JMS的改进
Spring 4.1引入了一个更简单的方法来注册JMS监听器,那就是使用
Spring 4.1还可以与4.0中引入的
消息监听器可以拥有更弹性的签名,并且可以受益于标准的消息处理注解,比如,
新的
最后,Spring 4.1还提供了以下各种各样的改进:
JmsTemplate支持同步的请求应答操作。
每个
通过
JMS 2.0支持共享消费者。
4.2 缓存的改进
Spring 4.1支持JCache(JSR-107)注解,直接使用Spring已存在的缓存配置和基础架构即可,不需要其它的改变。
Spring 4.1也极大地改进了它的缓存策略:
可以在运行时使用
更多自定义的操作:缓存解析,缓存管理,键生成器。
新的
使用
Spring 4.1还为了添加
4.3 Web的改进
新的抽象
JDK 1.8的
Jackson现在支持JSONP。参考Jackson JSONP支持。
新的生命周期选项可用于在控制器方法返回后且响应写出前拦截
有三个
Gson——比Jackson更轻的足迹,已用于Spring Android中。
Google协议缓冲——企业内部有效的服务间通信数据协议,但是也可以作为JSON和XML暴露于浏览器中。
通过jackson-dataformat-xml扩展支持基于XML的Jackson。当使用
类似JSP的视图现在可以通过引用控制器映射的名称与控制器建立链接。默认的名称将被赋给每一个
MVC Java配置与XML命名空间:
视图解析器可以被配置,包含对内容协商的支持。参考21.16.8 视图解析器。
视图控制器内置了对重定向及设置响应状态的支持。应用程序可以使用它配置重定向的URL,用视图渲染 404 响应,发送“无内容”响应,等等。一些用例请点击这里。
内置了自定义的路径匹配。参考21.16.11 路径匹配。
支持Groovy标记模板(基于Groovy 2.3)。
参考
4.4 WebSocket 消息处理的改进
支持SockJS(Java)客户端。参考
当STOMP客户端订阅和取消订阅时新的应用上下文事件
新的作用域“websocket”。
参考25.4.14 WebSocket作用域。
参考SPR-11660。
STOMP/WebSocket监测信息收集和日志管理。
参考25.4.16 运行时监测。
得到极大优化和改进的日志管理保留了可读性和简洁性,甚至是在DEBUG水平。
优化了消息的创建,包含了对临时消息可变性的支持,并避免自动消息id和时间戳的创建。参考Javadoc中的
在WebSocket会话创建60秒后没有活动则将会关闭STOMP/WebSocket连接。参考SPR-11884。
4.5 测试的改进
Groovy脚本现在可用于配置
参考带有Groovy脚本的上下文配置。
在事务测试方法中可以通过
参考编程式事务管理。
SQL脚本执行可以通过在每个类或方法上添加新的
参考14.5.7执行SQL脚本。
可以通过新的
参考带有测试property源文件的上下文配置。
默认的
参考自动发现默认的TestExecutionListeners。
自定义的
参考合并TestExecutionListeners。
测试上下文框架中事务测试的文档提供了更多深入的解释和附加的案例。
参考14.5.6 事务管理。
对
在Spring MVC测试中,JSON Assert作为使用JSONPath的额外选项,可以为JSON响应断言,这就像使用
可以通过
5. Spring 4.2的新特性和增强功能
5.1 核心容器的改进
类似
配置类现在可以声明
配置类可以声明一个
应用程序事件现在提供基于注解的模型了,也可以发布任何事件。
bean中的任何公共方法都能够通过
Spring 4.2提供了一流的支持用于声明和查找注解属性的别名。新的
以下注解都通过
例如,来自
类似地,重写了元注解属性的注解现在也可以使用
例如,现在可以像下面一样开发一种重写了自定义属性的组合注解。
参考spring注解编程模型
Spring在发现元注解的搜索算法上做了很多改进。例如,在注解继承体系中可以声明局部的组合注解。
重写了元注解属性的组合注解现在可以用在接口、抽象类、桥接和接口方法上,也可以用在类、标准方法、构造方法和字段上。
代表注解属性的Map(和
基于字段的数据绑定(
Apache的commons-pool2现在支持AOP池
为脚本化bean引入了
5.2 数据访问的改进
AspectJ现在支持
全面支持Hibernate ORM 5.0,作为JPA提供者(自动适配),也支持其原生API(被新的org.springframework.orm.hibernate5包覆盖)。
嵌入的数据库现在可以被自动赋值不同的(unique)名字,且
5.3 JMS的改进
每个监听器容器都能配置应答
响应目标可以使用
5.4 Web的改进
支持HTTP流和服务器发送事件。参考HTTP流。
支持内置CORS的全局(MVC Java配置和XML命名空间)和局部(例如,
参考26 CORS支持。
HTTP缓存更新:
新的创建者
在
自定义映射注解,使用
此扩展点可嵌入到URI模板库中。
OkHTTP与
自定义的baseUrl可以替代
序列化/反序列化的异常信息在WARN级别被记录。
默认的JSON前缀从“{}&&”改成了更安全的”)]}’,”中的一个(译者注:此处可能官方文档有误)。
新的扩展点
使用GSON或Jackson 2.6+时,处理器方法的返回类型被用于改进参数化类型的序列化,比如List
引入了
5.5 WebSocket消息处理的改进
暴露关于已连接用户和订阅存在的信息。
新的
在服务器集群间共享已存在的信息(参考代理中继配置选项)。
解决用户在服务器集群中的目的地(参考代理中继配置选项)。
通过
SpEL表达式“selector”头用于
通过TCP和WebSocket使用STOMP客户端。
参考25.4.13 STOMP客户端。
Jackson的
5.6 测试的改进
基于JUnit的集成测试现在可以使用JUnit规则执行而不是
参考Spring JUnit规则。
Spring MVC测试框架现在对HtmlUnit提供了一流的支持,包括集成Selenium的WebDriver,允许基于页面的web应用测试不再需要部署到一个Servlet容器上。
参考14.6.2, HtmlUnit的集成。
AopTestUtils是一个新的测试工具类,它允许开发者可以获取到底层的隐藏在一个或多个Spring代理类下的目标对象。
参考13.2.1 通用测试工具类。
ReflectionTestUtils现在支持为static字段设值和取值,包括常量。
通过
因此,
通过statements这个新的属性
用于在测试期间缓存应用上下文的
在Spring MVC测试框架中,
JDBC XML的命名空间支持一个新的属性database-name,位于
嵌入的数据库现在可以被自动赋予不同的名字,允许在同一测试套件不同的应用上下文中重复使用通用的测试数据库配置。
参考18.8.6 为嵌入的数据库生成不同的名字。
对Spring Framework 官方文档概述做了翻译,基本了解了一下Spring Framework是什么,本篇接着带着学习的心态对第二部分做简单的翻译。英文版请查考官方说明文档
二.Spring Framework 4.x 新特性
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<Customer> customerRepository。
使用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支持同步的请求应答操作。
每个
<jms:listener>元素可以指定监听器的优先级。
通过
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或
<mvc:annotation-driven>时,如果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脚本的上下文配置。
在事务测试方法中可以通过
TestTransactionAPI编程式地开始和结束测试事务。
参考编程式事务管理。
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)名字,且
<jdbc:embedded-database>支持新的属性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
<Foo>。
引入了
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,位于
<jdbc:embedded-database>中,允许开发者为嵌入的数据库设置不同的名字——例如,通过SpEl表达式或者被当前 有效bean定义 配置文件 影响的属性文件占位符。
嵌入的数据库现在可以被自动赋予不同的名字,允许在同一测试套件不同的应用上下文中重复使用通用的测试数据库配置。
参考18.8.6 为嵌入的数据库生成不同的名字。
MockHttpServletRequest和
MockHttpServletResponse现在通过
getDateHeader和
setDateHeader方法提供了更好的支持用于格式化日期头。
相关文章推荐
- SpringFramework学习-(1)SpringFramework官方文档翻译3
- MySQL学习 --来自官方文档的翻译
- db4o_8.0对象数据库官方文档翻译_学习笔记二
- Core Animation Introduction(apple官方文档翻译与学习01)
- cockroach官方文档翻译---1.3 学习cockroachSQL
- spark mlib官方文档学习和翻译笔记(1)
- db4o_8.0对象数据库官方文档翻译_学习笔记一
- DataBinding 官方文档翻译学习笔记
- Core Animation Basics(apple官方文档翻译与学习02)
- 苹果iPhone开发官方文档翻译和学习
- Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例
- db4o_8.0对象数据库官方文档翻译_学习笔记三
- Sencha Touch 2 官方文档翻译之 Controllers(控制器学习指南)
- urllib2模块中文翻译与学习 - Python 2.7.8官方文档
- Android Geofence的学习(二)继续翻译官方文档
- Android Geofence的学习(一)翻译官方文档
- Android Geofence的学习(一)翻译官方文档
- 学习Oracle7的OCI(Oracle Call Interface)时,翻译了一部分Oracle7的OCI官方文档
- orleans 2.0 教程之-----官方文档翻译,给大家学习ol一个参考
- Jinja2学习笔记暨官方文档的翻译