6 Spring框架中的新功能和增强功能 VI
sunRainAmazing
6.1核心集装箱改造
核心容器异常提供更丰富的元数据,以编程方式进行评估。
Java 8默认方法被检测为bean属性getters / setters。
在注入主bean的情况下,不会创建延迟候选bean。
@Autowired如果目标bean只定义一个构造函数 ,则不再需要指定注释。
@Configuration 类支持构造器注入。
用于指定condition一个@EventListener可用的任何SpEL表达式现在可以引用bean(例如@beanName.method())。
组合注释现在可以使用数组的组件类型的单个元素覆盖元注释中的数组属性。例如, 可以在组合注释中覆盖 String[] path属性。@RequestMappingString path。
@PersistenceContext/ 如果声明@PersistenceUnit为主,EntityManagerFactory则选择一个主bean。
@Scheduled并且@Schedules现在可以用作元注释来创建具有属性覆盖的自定义组合注释。
@Scheduled 适用于任何范围的bean。
6.2数据访问改进
jdbc:initialize-database并jdbc:embedded-database支持应用于每个脚本的可配置分隔符。
6.3缓存改进
Spring 4.3允许给定键上的并发调用进行同步,以使该值仅计算一次。这是一个选择启用功能,应通过新sync属性启用@Cacheable。
此功能在 添加Cache了get(Object key, Callable valueLoader)方法后引入了界面中的突破性变化。
Spring 4.3还改进了缓存抽象,如下所示:
缓存相关注释中的Spel表达式现在可以引用bean(ie @beanName.method())。
ConcurrentMapCacheManager并且ConcurrentMapCache现在支持通过新storeByValue属性对缓存条目进行序列化。
@Cacheable,@CacheEvict,@CachePut,和@Caching现在可以用作 元注释创建自定义的组成注释与属性覆盖。
6.4 JMS改进
@SendTo 现在可以在类级别指定共享一个公共的回复目的地。
@JmsListener并且@JmsListeners现在可以用作元注释来创建具有属性覆盖的自定义组合注释。
6.5 网络改进
内置支持HTTP HEAD和HTTP选项。
新@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,和@PatchMapping 组成注释的@RequestMapping。
有关详细信息,请参阅组合@RequestMapping变体。
新@RequestScope,@SessionScope以及@ApplicationScope 由注解 为网络范围。
有关详细信息,请参阅请求范围, 会话范围和 应用范围。
新@RestControllerAdvice注解联合@ControllerAdvice与@ResponseBody语义。
@ResponseStatus 现在在类级别支持并被所有方法继承。
@SessionAttribute用于访问会话属性的 新注释(参见示例)。
@RequestAttribute用于访问请求属性的 新注释(见示例)。
@ModelAttribute允许通过binding=false属性阻止数据绑定(参见参考)。
@PathVariable可以被声明为可选的(用于@ModelAttribute方法)。
将错误和自定义扔入的一致性暴露给MVC异常处理程序。
HTTP消息转换器中的一致的字符集处理,包括UTF-8默认的多部分文本内容。
静态资源处理使用配置ContentNegotiationManager为进行媒体类型确定。
RestTemplate并AsyncRestTemplate支持严格的URI变量编码DefaultUriTemplateHandler。
AsyncRestTemplate 支持请求截取。
6.6 WebSocket消息传递改进
@SendTo而@SendToUser现在可以在类级别指定共享一个共同的目的地。
6.7测试改进
Spring TestContext框架中 的JUnit支持现在需要JUnit 4.12或更高版本。
新SpringRunner 别名为SpringJUnit4ClassRunner。
测试相关注释现在可以在接口上声明 - 例如,用于使用 基于Java 8的接口默认方法的测试接口。
@ContextConfiguration如果@Configuration检测到默认的XML文件,Groovy脚本或类,现在可以完全省略 一个空的声明。
@Transactional测试方法不再需要public(例如,在TestNG和JUnit 5中)。
@BeforeTransaction并且@AfterTransaction方法不再需要public 并且现在可以在基于Java 8的界面默认方法上声明。
Spring TestContext框架中 的ApplicationContext缓存现在的默认最大大小为32,最近使用的驱逐策略。可以通过设置JVM系统属性或调用的Spring属性来配置最大大小 。 spring.test.context.cache.maxSize
ContextCustomizer用于ApplicationContext 在 bean定义已经加载到上下文中但在上下文被刷新之前自定义测试的 新API 。定制人员可以由第三方在全局范围内注册,以满足实施定制的需要ContextLoader。
@Sql并且@SqlGroup现在可以用作元注释来创建具有属性覆盖的自定义组合注释。
ReflectionTestUtils 现在在设置或获取字段时自动打开代理。
服务器端Spring MVC测试支持对具有多个值的响应头的期望。
服务器端Spring MVC测试解析数据请求内容并填充请求参数。
服务器端Spring MVC测试支持类似于调用处理程序方法的断言。
客户端REST测试支持允许指示请求的预期次数以及是否忽略期望声明的顺序(参见第15.6.3节“客户端REST测试”)。
客户端REST测试支持对请求体中的表单数据的期望。
6.8支持新的代码库和服务器版本
hibernateORM 5.2(仍然支持4.2 / 4.3和5.0 / 5.1,现在3.6已经弃用)
Hibernate Validator 5.3**(最小值保持在4.3)**
jackson2.8(自Spring4.3起,至少提高到jackson2.6+)
OkHttp 3.x(仍然支持OkHttp 2.x并排)
Tomcat 8.5以及9.0里程碑
Netty 4.1
Undertow 1.4
WildFly 10.1
此外,Spring Framework 4.3嵌入了更新的ASM 5.1,CGLIB 3.2.4和Objenesis 2.4 spring-core.jar。