跳转至

spring-framework v6.2.0-RC2

Spring Framework是什么

Spring Framework是一个开源的Java应用程序框架,旨在简化企业级应用程序的开发。它提供了一系列功能,包括依赖注入、面向切面编程、事务管理和MVC(模型-视图-控制器)架构等。Spring的核心理念是通过简化Java EE开发,使开发者能够更专注于业务逻辑,而不是繁琐的基础设施代码。

为什么要使用Spring Framework?

使用Spring Framework的原因有很多。首先,它提供了强大的依赖注入功能,使得组件之间的耦合度降低,从而提高了代码的可测试性和可维护性。其次,Spring的面向切面编程支持可以帮助开发者轻松地实现横切关注点,如日志记录和安全性。此外,Spring还提供了丰富的生态系统,包括Spring Boot、Spring Cloud等,使得构建微服务和云原生应用变得更加简单和高效。

入门示例

以下是一个简单的Spring应用程序示例,展示了如何使用Spring进行依赖注入:

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        MyService myService = context.getBean(MyService.class);
        myService.doSomething();
    }
}

@Configuration
class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

class MyService {
    public void doSomething() {
        System.out.println("Doing something!");
    }
}

Spring Framework v6.2.0-RC2版本更新了什么

在Spring Framework v6.2.0-RC2版本中,进行了多项重要更新和修复。以下是一些主要的更新内容:

新特性

  • 验证静态资源位置以斜杠结尾。
  • 支持记录规范构造函数。
  • 重命名Bean覆盖的元数据。
  • 改进ServletWebRequest的处理。
  • 增加对RFC 3986的URL解析支持。
  • 改进RestClient的自动检测功能。

Bug修复

  • 修复了PropertySourcesPropertyResolver不再转换为非CharSequence类型的问题。
  • 修复了UriComponentsBuilder中方案小写化导致URI变量使用失败的问题。
  • 修复了在不同顺序声明注解的情况下,Context缓存被破坏的问题。

文档更新

  • 增加了对Delete/Patch/Post/PutExchange中headers()的Javadoc说明。
  • 更新了调度文档。

依赖升级

  • 升级到Jackson 2.18。
  • 升级到Micrometer 1.14.0-RC1。
  • 升级到Reactor 2024.0.0-RC1。

更新日志

⭐ 新特性

  • 验证静态资源位置以斜杠结尾。
  • 支持记录规范构造函数。
  • 重命名Bean覆盖的元数据。
  • 重命名BeanOverrideStrategy枚举常量。
  • 改进ServletWebRequest。
  • 移除对静态资源处理中的相对路径支持。
  • 为@MockitoBean和@MockitoSpyBean添加value属性别名。
  • 拒绝带有工厂前缀的Bean名称用于Bean覆盖。
  • 修订WhatWG URL解析器中的URI变量语法处理。
  • 预注册单例的反射处理。
  • 移除不必要的数组长度检查。
  • 改进CorsConfiguration。
  • 为RFC 3986添加URL解析器。
  • 处理Reactor-Netty解析的X-Forwarded-Prefix。
  • RestClient应自动检测ReactorClientHttpRequestFactory。
  • 改进SockJS支持中的随机源。
  • 停止用伪定义替换现有的Bean覆盖定义。
  • 在@TestBean和@MockitoBean中引入enforceOverride标志。
  • 重构unwrapOptional方法以提高可读性和性能。
  • ServerSentEvent应实现equals()和hashCode()。
  • 减少由于NoTransactionInContextException实例造成的GC压力。
  • 将DynamicPropertyRegistrarBeanInitializer设为public。
  • 改进AbstractBeanDefinition和BeanMetadataAttribute的toString()。
  • 为资源处理程序检查添加实用方法。
  • UrlHandlerFilter不应从contextPath URL中删除尾部斜杠。
  • AbstractGenericHttpMessageConverter没有接受Charset的构造函数。
  • JdbcClient ResultQuerySpec - 提供optionalValue()方法。
  • 在HttpComponentsClientHttpRequestFactory上添加读取超时设置器。
  • 修复EclipseLinkJpaDialect中由同步块引起的虚拟线程固定问题。
  • 添加RestClient.Builder#messageConverters(List)。
  • 改进额外Assert方法的空安全性。
  • 当@TransactionalEventListener的@Transactional传播级别不是REQUIRES_NEW或NOT_SUPPORTED时抛出运行时错误。
  • 启用虚拟线程时,长时间运行的fixedDelay任务会阻塞fixedRate任务。
  • 提供公共机制以检测AOT处理是否正在进行。
  • 在JdkClientHttpRequest中仅使用一个请求超时机制。
  • 支持AOT和本地映像的Bean覆盖功能。
  • 限制Spring AOT中的BeanInstanceSupplier的反射操作。
  • 使用IntroductionInterceptor创建的Mixin结果为动态代理而非CGLIB代理。
  • ServletServerHttpRequest中的宽松URI解析。
  • 在StompSubProtocolHandler中排除授权消息的错误日志。
  • 在AbstractContextLoaderInitializer中传播完全功能的ServletContext(用于SessionCookieConfig访问)。

🐞 Bug修复

  • PropertySourcesPropertyResolver不再转换为非CharSequence类型。
  • UriComponentsBuilder中的方案小写化导致URI变量使用失败。
  • 移除@MockitoBeanSettings和对MockitoSession管理的支持。
  • @MockitoBeanSettings在@Nested测试类中不被继承。
  • AOT在生成声明为内部类的组件代码时失败。
  • @MockitoBean重置和MockitoSession管理在@Nested测试中不起作用。
  • DurationFormatterUtils不应尝试解析空持续时间。
  • DefaultServerHttpRequestBuilder可以创建区分大小写的Headers实例。
  • 如果两个Bean Override字段以不同顺序声明注解,则上下文缓存会损坏。
  • 测试Bean覆盖支持应仅覆盖单例。
  • 从代理服务抛出的Kotlin检查异常导致UndeclaredThrowableException。
  • 自6.2.0-M1以来,带有数组类型的通用Bean的自动装配已损坏。
  • AnnotatedBeanDefinitionReader应尊重@Fallback限定符,类似于@Primary

📔 文档

  • 为Delete/Patch/Post/PutExchange中的headers()添加Javadoc。
  • 记录XML解析器使用以应对安全误报。
  • 更新调度文档。
  • 记录在6.2中引入的TestExecutionListener实现。
  • 在文档中将RFC 7807替换为RFC 9457。
  • 记录TestContextAnnotationUtils对于正确支持@Nested测试类的必要性。
  • 将e.g.替换为例如。

🔨 依赖升级

  • 升级到Jackson 2.18。
  • 升级到Micrometer 1.14.0-RC1。
  • 升级到Reactor 2024.0.0-RC1。