核心容器改进

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

* 见 [Spring Annotation Programming Model](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#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)

书籍推荐