Spring Framework 4.2 中的新功能和增强功能

至今为止,Spring Framework 的最新版本为 4.2.1.RELEASE。 那么 Spring Framework 4.2 中的又有哪些新功能和增强功能呢?

核心容器改进

  • 如 @bean 注释,就如同得到发现和处理 Java 8 默认方法一样,可以允许组合配置类与默认@bean 接口方法。
  • 配置类现在可以声明 @import 作为常规组件类,允许引入的配置类和组件类进行混合。
  • 配置类可以声明一个 @Order 值,用来得到相应的处理顺序(例如重写 bean 的名字),即使通过类路径扫描检测。
  • @Resource 注入点支持 @Lazy 声明,类似于 @autowired, 用于接收用于请求目标 bean 的懒初始化代理。
  • 现在的应用程序事件基础架构提供了一个基于注解的模型以及发布任意事件的能力。
    • 任何受管 bean 的公共方法使用 @EventListener 注解来消费事件。
    • @TransactionalEventListener 提供事务绑定事件支持。
  • Spring Framework 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 {};
      
       // ... 

      }

    • 同样, 组合注解(composed annotations)从元注解覆盖的属性,现在可以使用 @AliasFor 进行细粒度控制哪些属性是覆盖在一个注释的层次结构。事实上,现在可以声明一个别名给元注释的 value 属性。
    • 例如,开发一个组合注解用于一个自定义的属性的覆盖

      @ContextConfiguration public @interface MyTestConfig {

      class, attribute = "value")
       String[] xmlFiles();
      
       // ...
      

      }

    • Spring Annotation Programming Model
  • 许多改进Spring的搜索算法用于寻找元注解。例如,局部声明组合注解现在喜欢继承注解。
  • 从元注解覆盖属性的组合注解,可以被发现在接口和 abstract, bridge, & interface 方法就像在类,标准方法,构造函数,和字段。
  • Map 表示的注解属性(和 AnnotationAttributes 实例)可以 synthesized (合成,即转换)成一个注解。
  • 基于字段的数据绑定的特点(DirectFieldAccessor)与当前的基于属性的数据绑定关联(BeanWrapper)。特别是,基于字段的绑定现在支持集合,数组和 Map 的导航。
  • DefaultConversionService 现在提供开箱即用的转化器给 Stream, Charset, Currency, 和 TimeZone. 这些转换器可以独立的添加到任何 ConversionService
  • DefaultFormattingConversionService 提供开箱即用的支持 JSR-354 的 Money & Currency 类型 (前提是 'javax.money' API 出现在 classpath): 这些被命名为 MonetaryAmount 和 CurrencyUnit。支持使用 @NumberFormat
  • @NumberFormat 现在作为元注解使用
  • JavaMailSenderImpl 中新的 testConnection() 方法用于检查与服务器的连接
  • ScheduledTaskRegistrar 用于暴露调度的任务
  • Apache commons-pool2 现在支持用于 AOP CommonsPool2TargetSource 的池化
  • 引入 StandardScriptFactory 作为脚本化 bean 的 JSR-223 的基本机制,通过 XML 中的 lang:std 元素暴露。支持如 JavaScript 和 JRuby。(注意:JRubyScriptFactory 和 lang:jruby现在不推荐使用了 , 推荐用 JSR-223)

数据访问改进

  • javax.transaction.Transactional 现在可以通过 AspectJ 支持
  • SimpleJdbcCallOperations 现在支持命名绑定
  • 完全支持 Hibernate ORM 5.0: 作为 JPA 供应商 (自动适配)和原生的 API 一样 (在新的 org.springframework.orm.hibernate5 包中涵盖了该内容)
  • 嵌入式数据库可以自动关联唯一名字,并且 <jdbc:embedded-database> 支持新的 database-name 属性。见下面“测试改进”内容

JMS 改进

  • autoStartup 属性可以通过 JmsListenerContainerFactory 进行控制
  • 应答类型 Destination 可以配置在每个监听器容器
  • @SendTo 的值可以用 SpEL 表达式
  • 响应目的地可以通过 JmsResponse 在运行时计算
  • @JmsListener 是可以可以重复的注解用于声明多个 JMS 容器在相同的方法上 (若你还没有用上 Java8 请使用新引入的 @JmsListeners)。

Web 改进

  • 支持 HTTP Streaming 和 Server-Sent Events , se见 “HTTP Streaming
  • 内建支持 CORS ,包括全局 (MVC Java 配置和 XML 命名空间) 和本地 (如 @CrossOrigin) 配置。见 26 章, CORS 支持
  • HTTP 缓存升级
    • 新的 CacheControl 构建器; 插入 ResponseEntity, WebContentGenerator, ResourceHttpRequestHandler
    • 改进的 ETag/Last-Modified 在 WebRequest 中支持
  • 自定义映射注解使用 @RequestMapping 作为 元数据注解
  • AbstractHandlerMethodMapping 中的 public 方法用于运行时注册和注销请求映射
  • AbstractDispatcherServletInitializer 中的 Protected createDispatcherServlet 方法用来进一步自定义 DispatcherServlet 实例
  • HandlerMethod 作为 @ExceptionHandler方法的方法参数,特别是方便 @ControllerAdvice 组件
  • java.util.concurrent.CompletableFuture 作为 @Controller 方法返回值类型
  • 字节范围(Byte-range)的请求支持在 HttpHeaders,用于静态资源
  • @ResponseStatus 发现嵌套异常。
  • 在 RestTemplate 中的 UriTemplateHandler 扩展端点
    • DefaultUriTemplateHandler 暴露 baseUrl 属性和路径段的编码选项
    • 扩展端点可以使用插入任何 URI 模板库
  • OkHTTP 与 RestTemplate 集成
  • 自定义 baseUrl 在 MvcUriComponentsBuilder 选择方法。
  • 序列化/反序列化异常消息现在记录为 WARN 级别
  • 默认的 JSON 前缀改变了从{}&&改为更安全的)]}’,
  • 新的 RequestBodyAdvice 扩展点和内置的实现支持 Jackson 的 在 @RequestBody 的 @JsonView
  • 当使用 GSON 或 Jackson 2.6 +,处理程序方法的返回类型是用于提高参数化类型的序列化,比如 List<Foo>
  • 引入的 ScriptTemplateView 作为 JSR-223 的脚本化 web 视图机制为基础,关注 JavaScript 视图模板 Nashorn (JDK 8)。

WebSocket 消息改进

  • 暴露展示信息关于用户的连接和订阅:

    • 新 SimpUserRegistry 公开为一个名为“userRegistry”的bean。
    • 共享在服务器集群的展示信息(见代理中继配置选项)
  • 解决用户目的地在集群的服务器(见代理中继配置选项)。
  • StompSubProtocolErrorHandler 扩展端点用来自定义和控制 STOMP ERROR 帧给用户
  • 全局 @MessageExceptionHandler 方法通过 @ControllerAdvice 组件
  • 心跳和 SpEL 表达式'selector'头用 SimpleBrokerMessageHandler 订阅
  • STOMP 客户端使用TCP 和 WebSocket; 见 25.4.13, “STOMP 客户端
  • @SendTo 和 @SendToUser 可以包含目标变量的占位符。 Jackson 的 @JsonView 支持 @MessageMapping 和 @SubscribeMapping 方法返回值
  • ListenableFuture 和 CompletableFuture 是从 @MessageMapping 和 @SubscribeMapping 方法返回类型值
  • MarshallingMessageConverter 用于 XML 有效载荷

测试改进

  • 基于 JUnit 集成测试现在可以执行 JUnit 规则而不是SpringJUnit4ClassRunner。这允许基于 spring 的集成测试与运行JUnit 的 Parameterized 或第三方 运行器 MockitoJUnitRunner 等。详见 Spring JUnit 规则
  • Spring MVC Test 框架,现在支持第一类 HtmlUnit,包括集成 Selenium’s WebDriver,允许基于页面的 Web 应用测试而无需部署到 Servlet 容器。详见 14.6.2, “HtmlUnit 集成”
  • AopTestUtils 是一个新的测试工具,允许开发者获得潜在的目标对象的引用隐藏在一个或多个 Spring 代理。详见13.2.1, “常见测试工具”
  • ReflectionTestUtils 现在支持 setting 和 getting static 字段,包括常量
  • bean 定义归档文件的原始顺序,通过 @ActiveProfiles 声明,现在保留为了支持用例,如 Spring 的 ConfigFileApplicationListener 引导加载配置文件基于活动归档文件的名称。
  • @DirtiesContext 支持新 BEFORE_METHOD BEFORE_CLASS,BEFORE_EACH_TEST_METHOD 模式,用于测试之前关闭ApplicationContext——例如,如果一些烦人的(即,有待确定)测试在一个大型测试套件的 ApplicationContext 的原始配置已经损坏。
  • @Commit 是新的注解直接可以用来代替 @Rollback(false)
  • @Rollback 用来配置类级别的默认回滚语义
    • 因此,现在 @TransactionConfiguration 弃用,在后续版本将被删除。
  • @Sql 现在支持内联 SQL 语句的执行通过一个新的 statements 属性
  • ContextCache 用于缓存测试之间的 ApplicationContext,而现在这是一个公开的 API ,默认的实现可以替代自定义的缓存需求
  • DefaultTestContext, DefaultBootstrapContext, 和 DefaultCacheAwareContextLoaderDelegate 现在是公开的类,支持子包,允许自定义扩展
  • TestContextBootstrapper 现在负责构建 TestContext
  • 在 Spring MVC Test 框架,MvcResult 详情可以被日志记录在 DEBUG 级别或者写入自定义的 OutputStream 或 Writer。详见 log(), print(OutputStream), 和 MockMvcResultHandlers 的 print(Writer) 方法
  • JDBC XML名称空间支持一个新的 <jdbc:embedded-database> 的 database-name 属性,允许开发人员为嵌入式数据库设置独特的名字——例如,通过一个 SpEL 表达式或 前活动bean定义配置文件所影响的占位符属性
  • 嵌入式数据库现在可以自动分配一个唯一的名称,允许常用的测试数据库配置在不同的 ApplicationContext 的测试套件中。 参见18.8.6“给嵌入式数据库生成惟一名称”的细节。

参考

    时间: 2024-10-13 03:18:07

    Spring Framework 4.2 中的新功能和增强功能的相关文章

    甲骨文推出Oracle Solaris 11.1增添300多项新性能和增强功能

    甲骨文全球大会,2012年10月3日--甲骨文公司宣布推出Oracle Solaris 11.1,使Oracle Solaris 11产品系列增添了300多项新性能和增强功能. 利用Oracle Solaris 11中内置的升级工具,客户将能够快速.简便地升级到Oracle Solaris 11.1. Oracle Solaris 11是首款云操作系统,可以帮助客户在众多SPARC和x86服务器及集成设计系统上建立大规模企业级的基础设施即服务(IaaS).平台即服务(PaaS)和软件即服务(Sa

    VNX OE for Block v05.32.000.5.006和VNX OE for File v7.1.47.5的新特性和增强功能概述

    故障现象: VNX OE (Operating Environment) 操作环境新版本已正式发布.对应Block和File的版本号分别为VNX OE for Block v05.32.000.5.006和VNX OE for File v7.1.47.5.现在就本次新版本VNX OE更新里所含的新内容做一个概要的总结. 解决方案: 新特性和增强功能 ·VNX数据块至统一存储(Block to Unified)即插即用升级服务:此功能允许用户实施块至统一存储的升级. ·升级准备检查工具(Upgr

    在.NET Framework 3.5中管理目录安全主体

    本文以 Visual Studio 2008 的预发布版为基础.文中包含的所有信息均有 可能变更. 本文讨论: System.DirectoryServices.AccountManagement 类 Active Directory 域服务 Active Directory 轻型目录服务 (AD LDS) 管理用户.计算机和组主体 本文使用了以下技术: .NET Framework 3.5, Visual Studio 2008 目录 目录服务编程体系结构 建立上下文 创建用户帐户 创建组和计

    WebSphere Application Server V7中的新特性

    IBM WebSphere Application Server V7 中包括一些功能强大的新特性和显著的增强功能,以帮助您实现更高的工作效率.更强的安全性.更紧密的集成和简化的管理.了解这个新版本中的关键特性,这些特性使得该版本可以为您的面向服务的体系结构提供灵活而可靠的基础. 引言 IBM WebSphere Application Server 为面向服务的体系结构(Service Oriented Architecture,SOA)应用程序交付敏捷.可靠的基础,以使应用程序与业务和 IT

    ubuntu虚拟机怎么使用VirtualBox软件增强功能安装?

      本教程将简要介绍在ubuntu虚拟机中安装增强功能的步骤. 1.选中ubuntu虚拟机,点击上方的"启动"按钮,启动虚拟机 2.在"设备"下拉菜单中,点击"安装增强功能"按钮: 3.之后在虚拟机中会弹出"安装增强功能"对话框, 点击"run "按钮, 4.之后会弹出授权对话框,需要安装权限,输入安装时候的用户密码: 5.输入密码后点击"Author"按钮进行安装,会弹出安装过程对话框

    Spring Framework中的面向方面编程

    编程 作为这个介绍Spring框架中的面向方面编程(Aspect-Oriented Programming,AOP)的系列的第一部分,本文介绍了使您可以使用Spring中的面向方面特性进行快速开发的基础知识.使用跟踪和记录方面(面向方面领域的HelloWorld)作为例子,本文展示了如何使用Spring框架所独有的特性来声明切入点和通知以便应用方面.本系列的第二部分将更深入地介绍如何运用Spring中的所有通知类型和切入点来实现更实用的方面和面向方面设计模式.对于AOP的更一般性的介绍,请查看O

    Spring Framework中的AOP编程之入门篇

    编程 作为这个介绍Spring框架中的面向方面编程(Aspect-Oriented Programming,AOP)的系列的第一部分,本文介绍了使您可以使用Spring中的面向方面特性进行快速开发的基础知识.使用跟踪和记录方面(面向方面领域的HelloWorld)作为例子,本文展示了如何使用Spring框架所独有的特性来声明切入点和通知以便应用方面.本系列的第二部分将更深入地介绍如何运用Spring中的所有通知类型和切入点来实现更实用的方面和面向方面设计模式. 本文的目的不是要介绍构成模块化J2

    ASP.NET Whidbey 中新的代码编译功能

    asp.net|编译 ASP.NET Whidbey 中新的代码编译功能G. Andrew DuthieGraymad Enterprises, Inc. 2003 年 10 月 摘要:了解如何利用 ASP.NET Whidbey 更轻松地使用代码.Code 目录会自动为您的站点编译代码,而预编译会使部署工作更容易. 下载本文的源代码.(请注意,在示例文件中,程序员的注释使用的是英文,本文中将其译为中文是为了便于读者理解.) 目录简介新的模块化代码模型\Code 目录利息计算器预编译支持在位预编

    ASP.NET中新的代码编译功能(一)

    asp.net|编译 摘要:了解如何利用 ASP.NET Whidbey 更轻松地使用代码.Code 目录会自动为您的站点编译代码,而预编译会使部署工作更容易. 下载本文的源代码.(请注意,在示例文件中,程序员的注释使用的是英文,本文中将其译为中文是为了便于读者理解.) 简介 即将推出的新版 Microsoft ASP.NET 介绍了大量新功能和改进功能,它的代号为 ASP.NET Whidbey,是根据新版 Microsoft Visual Studio .NET 的代号命名的.其中的某些功能