第5章 Spring 4.0增强和新功能 III -- Spring4.3.8参考文档中文版

5. Spring框架中的新功能和增强功能 III

sunRainAmazing

5.1核心容器改造

1、诸如@Bean使用Java 8默认方法检测和处理的注释,允许使用默认@Bean方法从接口组态配置类。
2、配置类可以@Import使用常规组件类声明,允许混合导入的配置类和组件类。
3、配置类可以声明一个@Order值,以相应的顺序进行处理(例如,通过名称重写bean),即使通过类路径扫描检测到。
4、@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

例如,@ContextConfiguration从spring-test模块现在声明如下:

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。
1. 用于查找元注释的Spring搜索算法的许多改进。例如,本地声明的组合注释 现在对继承的注释是有利的。

  1. 现在可以在接口和抽象,桥接和接口方法以及类,标准方法,构造函数和字段上发现从元注释覆盖属性的组合注释。

  2. 表示注释属性(和AnnotationAttributes实例)的映射可以被合成(即转换)为注释。

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

  4. DefaultConversionService现在提供出的现成转换器Stream,Charset, Currency,和TimeZone。这样的转换器也可以单独添加到任意一个ConversionService。

  5. DefaultFormattingConversionService配备了支持JSR-354值类型外的现成支持(如果”javax.money” API存在的类路径上):即MonetaryAmount和CurrencyUnit。这包括支持@NumberFormat。

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

  7. JavaMailSenderImpl有一种testConnection()检查连接到服务器的新方法。

  8. ScheduledTaskRegistrar 暴露计划的任务。

  9. commons-pool2现在, Apache 支持一个池化的AOP CommonsPool2TargetSource。

  10. StandardScriptFactory作为基于JSR-223的脚本bean的机制 引入,通过lang:stdXML中的元素公开。支持JavaScript和JRuby。(注意:JRubyScriptFactorylang:jruby现在已被弃用,有利于使用JSR-223。)

5.2数据访问改进

  1. javax.transaction.Transactional 现在通过AspectJ支持。

  2. SimpleJdbcCallOperations 现在支持命名绑定。

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

  4. 嵌入式数据库现在可以自动分配唯一的名称,并 <jdbc:embedded-database>支持一个新的database-name属性。有关详细信息,请参阅下面的”测试改进”。

5.3 JMS改进

  1. 该autoStartup属性可通过被控制JmsListenerContainerFactory。

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

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

  4. 响应目的地可以在运行时使用JmsResponse

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

5.4 Web改进

HTTP Streaming和Server-Sent事件支持,请参阅”HTTP Streaming”一节。

内置支持CORS,包括全局(MVC Java配置和XML命名空间)和本地(例如@CrossOrigin)配置。有关详细信息,请参见第27章CORS支持。

HTTP缓存更新:
1. 新CacheControl注入ResponseEntity,WebContentGenerator, ResourceHttpRequestHandler。
2. 改进的ETag / Last-Modified支持WebRequest。

自定义映射注释,@RequestMapping用作元注释。

AbstractHandlerMethodMapping在运行时注册和注销请求映射的 公共方法。

用于进一步自定义要使用的实例的 受保护createDispatcherServlet方法。 AbstractDispatcherServletInitializerDispatcherServlet

HandlerMethod作为方法的方法参数@ExceptionHandler,特别适用于@ControllerAdvice组件。

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

字节范围请求支持HttpHeaders和服务静态资源。

@ResponseStatus 检测到嵌套异常。

UriTemplateHandler扩展点在RestTemplate。

1. DefaultUriTemplateHandler公开baseUrl属性和路径段编码选项。
2. 扩展点也可以用于插入任何URI模板库。

OkHTTP与RestTemplate。

自定义baseUrl替代方法MvcUriComponentsBuilder。

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

默认JSON前缀已从”{} &&”更改为更安全的”)]}’,”一。

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

当使用GSON或Jackson 2.6+时,处理程序方法返回类型用于改进参数化类型的序列化List。

引入ScriptTemplateView基于JSR-223的脚本化网页视图机制,重点介绍Nashorn(JDK 8)上的JavaScript视图模板。

5.5 WebSocket消息传递改进

暴露有关连接用户和订阅的存在信息:

新的SimpUserRegistry暴露为一个名为”userRegistry”的bean。

在服务器群集之间共享存在信息(请参阅代理中继配置选项)。

在服务器群集之间解析用户目标(请参阅代理中继配置选项)。

StompSubProtocolErrorHandler 扩展点定制和控制STOMP错误帧到客户端。

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

SpEL表达式”选择器”标题用于订阅SimpleBrokerMessageHandler。

STOMP客户端通过TCP和WebSocket使用; 请参见第26.4.14节”STOMP客户端”。

@SendTo并且@SendToUser可以包含目标变量占位符。

Jackson @JsonView支持返回值@MessageMapping和@SubscribeMapping方法。

ListenableFuture并CompletableFuture作为返回值类型 @MessageMapping和@SubscribeMapping方法。

MarshallingMessageConverter 用于XML有效载荷。

5.6测试改进

基于JUnit的集成测试现在可以使用JUnit规则执行,而不是 SpringJUnit4ClassRunner。这样可以使用基于Spring的集成测试来运行,例如JUnit Parameterized或第三方 运行程序MockitoJUnitRunner。
有关详细信息,请参阅”Spring JUnit 4规则”一节。

Spring MVC测试框架现在为HtmlUnit提供一流的支持,包括与Selenium的WebDriver集成,允许基于页面的Web应用程序测试,而无需部署到Servlet容器。
有关详细信息,请参见第15.6.2节”HtmlUnit集成”。

AopTestUtils 是一个新的测试实用程序,允许开发人员获取对一个或多个Spring代理隐藏的底层目标对象的引用。
有关详细信息,请参见第14.2.1节”常规测试实用程序”。

ReflectionTestUtils现在支持设置和获取static字段,包括常量。
@ActiveProfiles现在保留了 通过声明的bean定义配置文件的原始顺序, 以便支持使用情况,例如ConfigFileApplicationListener基于活动配置文件名称加载配置文件的Spring Boot 。

@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现在的公共类的 support子包,允许自定义扩展。

TestContextBootstrapper现在负责建设 TestContext。
在Spring MVC测试框架中,MvcResult细节现在可以被记录在一起,也可以DEBUG写入自定义OutputStream或者Writer。有关详细信息,请参阅新的log(),print(OutputStream)和print(Writer)方法 MockMvcResultHandlers。

JDBC XML命名空间支持新database-name属性 <jdbc:embedded-database>,允许开发人员为嵌入式数据库设置唯一的名称 - 例如,通过受当前活动bean定义配置文件影响的Spel表达式或属性占位符。
嵌入式数据库现在可以自动分配一个唯一的名称,允许ApplicationContext在测试套件内以不同的方式重用常见的测试数据库配置 。
有关详细信息,请参见第19.8.6节”为嵌入式数据库生成唯一名称”。

MockHttpServletRequest和MockHttpServletResponse现在的日期头通过格式提供更好的支持getDateHeader和setDateHeader 方法。

猜你喜欢

转载自blog.csdn.net/sunrainamazing/article/details/77200094
今日推荐