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

4.2版包含了许多改进,如以下部分所述:

5.1 核心容器改进

  • 在Java 8默认方法中也可以检测和处理 @Bean 等注释,允许使用默认的 @Bean 方法从接口编写配置类。

  • 配置类现在可以使用常规组件类声明 @Import ,允许混合使用导入的配置类和组件类。

  • 配置类可以声明 @Order 值,即使通过类路径扫描检测到,也会按相应的顺序进行处理(例如,按名称覆盖bean)。

  • @Resource 注入点支持 @Lazy 声明,类似于 @Autowired ,接收所请求目标bean的延迟初始化代理。

  • 应用程序事件基础结构现在提供 annotation-based model 以及发布任意事件的能力。

  • 托管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 {};

    // ...
}
  • 类似地,从元注释覆盖属性的组合注释现在可以使用 @AliasFor 进行细粒度控制,以精确控制注释层次结构中的哪些属性。实际上,现在可以为元注释的 value 属性声明别名。

  • 例如,现在可以使用自定义属性覆盖开发组合注释,如下所示。

@ContextConfiguration
public @interface MyTestConfig {

    @AliasFor(annotation = ContextConfiguration.class, attribute = "value")
    String[] xmlFiles();

    // ...
}
  • Spring Annotation Programming Model

  • 对用于查找元注释的Spring搜索算法进行了大量改进。例如,本地声明的组合注释现在比继承注释更受青睐。

  • 现在可以在接口和抽象,桥接和接口方法以及类,标准方法,构造函数和字段上发现从元注释覆盖属性的组合注释。
    表示注释属性(和 AnnotationAttributes 实例)的 Map 可以合成(即,转换)为注释。

  • 基于字段的数据绑定( DirectFieldAccessor )的功能已与当前基于属性的数据绑定( BeanWrapper )对齐。特别是,基于字段的绑定现在支持集合,数组和映射的导航。

  • DefaultConversionService 现在为 StreamCharsetCurrencyTimeZone 提供了开箱即用的转换器。这些转换器也可以单独添加到任意的 ConversionService 中。

  • DefaultFormattingConversionService 为JSR-354 Money&Currency中的值类型提供了开箱即用的支持(如果类路径中存在'javax.money'API):即 MonetaryAmountCurrencyUnit 。这包括支持应用 @NumberFormat

  • @NumberFormat 现在可以用作元注释。

  • JavaMailSenderImpl 有一个新的 testConnection() 方法,用于检查与服务器的连接。

  • ScheduledTaskRegistrar 公开计划任务。

  • 现在支持Apache commons-pool2 用于池AOP CommonsPool2TargetSource

  • 引入 StandardScriptFactory 作为基于JSR-223的脚本bean机制,通过XML中的 lang:std 元素公开。例如支持JavaScript和JRuby。 (注意:JRubyScriptFactory和 lang:jruby 现在已弃用,赞成使用JSR-223。)

5.2 数据访问改进

现在通过AspectJ支持

  • javax.transaction.Transactional

  • SimpleJdbcCallOperations 现在支持命名绑定。

  • 完全支持Hibernate ORM 5.0:作为JPA提供程序(自动调整)以及通过其原生API(由新的 org.springframework.orm.hibernate5 包覆盖)。

  • 现在可以为嵌入式数据库自动分配唯一名称, <jdbc:embedded-database> 支持新的 database-name 属性。有关详细信息,请参阅下面的 "Testing Improvements" 。

5.3 JMS改进

  • autoStartup 属性可以通过 JmsListenerContainerFactory 控制。

  • 现在可以为每个侦听器容器配置回复类型 Destination

  • @SendTo 注释的值现在可以使用SpEL表达式。

  • 响应目的地可以是 computed at runtime using JmsResponse

  • @JmsListener 现在是一个可重复的注释,可以在同一个方法上声明几个JMS容器(如果你还没有使用Java8,请使用新引入的 @JmsListeners )。

5.4 网站改进

  • HTTP Streaming和Server-Sent Events支持,请参阅 the section called “HTTP Streaming”

  • 内置对CORS的支持,包括全局(MVC Java配置和XML命名空间)和本地(例如 @CrossOrigin )配置。有关详细信息,请参阅 Chapter 27, CORS Support

  • HTTP缓存更新:

  • CacheControl 建设者;插入 ResponseEntityWebContentGeneratorResourceHttpRequestHandler

  • 改进了 WebRequest 中的ETag / Last-Modified支持。

  • 自定义映射注释,使用 @RequestMapping 作为元注释。

  • AbstractHandlerMethodMapping 中的公共方法在运行时注册和取消注册请求映射。

  • AbstractDispatcherServletInitializer 中的受保护 createDispatcherServlet 方法进一步自定义要使用的 DispatcherServlet 实例。

  • HandlerMethod 作为 @ExceptionHandler 方法的方法参数,在 @ControllerAdvice 组件中尤其方便。

  • java.util.concurrent.CompletableFuture 作为 @Controller 方法的返回值类型。

  • HttpHeaders 中的字节范围请求支持以及服务静态资源。
    在嵌套异常上检测到

  • @ResponseStatus
    67933 UriTemplateHandler RestTemplate 中的扩展点。

  • DefaultUriTemplateHandler 公开 baseUrl 属性和路径段编码选项。

  • 扩展点也可用于插入任何URI模板库。

  • OkHTTPRestTemplate 集成。

  • 自定义 baseUrl 替代 MvcUriComponentsBuilder 中的方法。

  • 序列化/反序列化异常消息现在以WARN级别记录。

  • 默认JSON前缀已从 "{} && " 更改为更安全的 ")]}', " 。

  • 新的 RequestBodyAdvice 扩展点和内置实现,以支持杰出的 @JsonView @RequestBody 方法参数。

  • 使用GSON或Jackson 2.6时,处理程序方法返回类型用于改进参数化类型的序列化,如 List<Foo>

  • 引入 ScriptTemplateView 作为基于JSR-223的脚本Web视图机制,重点关注Nashorn(JDK 8)上的JavaScript视图模板。

5.5 WebSocket消息传递改进

  • 公开有关已连接用户和订阅的状态信息:

  • new SimpUserRegistry 公开为名为 "userRegistry" 的bean。

  • 跨服务器 集群 共享在线信息(请参阅代理中继配置选项)。

  • 跨服务器群解析用户目标(请参阅代理中继配置选项)。

  • StompSubProtocolErrorHandler 扩展点,用于自定义和控制客户端的STOMP ERROR帧。

  • 全局 @MessageExceptionHandler 方法通过 @ControllerAdvice 组件。

  • Heart-beats和一个SpEL表达式'selector' Headers ,用于订阅 SimpleBrokerMessageHandler

  • STOMP客户端,用于TCP和WebSocket;见 Section 26.4.15, “STOMP Client”

  • @SendTo@SendToUser 可以包含目标变量占位符。

  • Jackson 的 @JsonView 支持 @MessageMapping@SubscribeMapping 方法的返回值。

  • ListenableFutureCompletableFuture 作为 @MessageMapping@SubscribeMapping 方法的返回值类型。

  • MarshallingMessageConverter 用于XML有效负载。

5.6 测试改进

  • 现在可以使用JUnit规则而不是 SpringJUnit4ClassRunner 执行基于JUnit的集成测试。这允许基于Spring的集成测试与JUnit的 Parameterized 或第三方运行程序(如 MockitoJUnitRunner )等替代运行程序一起运行。

  • 有关详细信息,请参阅 the section called “Spring JUnit 4 Rules”

  • Spring MVC Test框架现在为HtmlUnit提供了一流的支持,包括与Selenium的WebDriver的集成,允许基于页面的Web应用程序测试,而无需部署到Servlet容器。

  • 有关详细信息,请参阅 Section 15.6.2, “HtmlUnit Integration”

  • AopTestUtils 是一个新的测试实用程序,它允许开发人员获取对隐藏在一个或多个Spring代理后面的底层目标对象的引用。

  • 有关详细信息,请参阅 Section 14.2.1, “General testing utilities”

  • ReflectionTestUtils 现在支持设置和获取 static 字段,包括常量。

  • 现在保留通过 @ActiveProfiles 声明的bean定义配置文件的原始顺序,以便支持Spring Boot的 ConfigFileApplicationListener 等用例它根据活动配置文件的名称加载配置文件。

  • @DirtiesContext 支持新的 BEFORE_METHODBEFORE_CLASSBEFORE_EACH_TEST_METHOD 模式,用于在测试之前关闭 ApplicationContext - 例如,如果在大型测试套件中的某些恶意(即尚未确定)测试已损坏 ApplicationContext 的原始配置。

  • @Commit 是一个新注释,可用作 @Rollback(false) 的直接替代。

  • @Rollback 现在可用于配置类级别的默认回滚语义。

  • 因此, @TransactionConfiguration 现已弃用,将在后续版本中删除。

  • @Sql 现在支持通过新的 statements 属性执行内联SQL语句。

  • 用于在测试之间缓存 ApplicationContextContextCache 现在是一个公共API,其默认实现可以替换为自定义缓存需求。

  • DefaultTestContextDefaultBootstrapContextDefaultCacheAwareContextLoaderDelegate 现在是 support 子包中的公共类,允许自定义扩展。

  • TestContextBootstrapper s现在负责构建 TestContext

  • 在Spring MVC测试框架中, MvcResult 详细信息现在可以在 DEBUG 级别记录或写入自定义 OutputStreamWriter 。有关详细信息,请参阅 MockMvcResultHandlers 中的新 log()print(OutputStream)print(Writer) 方法。

  • JDBC XML名称空间支持 <jdbc:embedded-database> 中的新 database-name 属性,允许开发人员为嵌入式数据库设置唯一名称 - 例如,通过SpEL表达式或受当前活动Bean定义概要文件影响的属性占位符。

  • 嵌入式数据库现在可以自动分配一个唯一的名称,允许在测试套件中的不同_678507中重用常见的测试数据库配置。

  • 有关详细信息,请参阅 Section 19.8.6, “Generating unique names for embedded databases”

  • MockHttpServletRequestMockHttpServletResponse 现在通过 getDateHeadersetDateHeader 方法为日期 Headers 格式提供更好的支持。

Updated at: 5 months ago
4.5. 测试改进Table of content6. Spring Framework 4.3中的新功能和增强功能
Comment
You are not logged in.

There are no comments.