跳转至

spring-framework v6.2.3

为什么要使用spring-framework

在当今快速发展的技术世界中,开发者面临着无数的选择和挑战。选择一个合适的框架就像在众多的星星中找到北极星。Spring Framework正是这样一颗明亮的星星,它不仅为开发者提供了强大的功能,还能帮助他们在复杂的项目中保持清晰的思路。然而,许多开发者在选择框架时常常陷入矛盾:是选择一个流行但复杂的框架,还是一个简单但功能有限的框架?Spring Framework恰好解决了这个矛盾,它以其灵活性和强大功能,成为了开发者的理想选择。

spring-framework是什么

Spring Framework是一个开源的Java框架,旨在简化企业级应用程序的开发。它提供了全面的基础设施支持,使开发者能够专注于业务逻辑,而不必担心底层的复杂性。Spring的核心特性包括依赖注入、面向切面编程、事务管理等,使得构建可维护和可扩展的应用程序变得更加容易。

入门示例

想象一下,你正在开发一个在线购物平台。用户可以浏览商品、添加到购物车并进行结账。使用Spring Framework,你可以轻松地创建一个控制器来处理用户请求。比如,你可以创建一个ProductController,它使用Spring的依赖注入来获取商品服务,并返回商品列表。通过Spring的注解,你可以快速配置路由和服务,极大地提高开发效率。

@RestController
@RequestMapping("/products")
public class ProductController {
    @Autowired
    private ProductService productService;

    @GetMapping
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }
}

在这个示例中,Spring Framework帮助你简化了控制器的创建和依赖管理,让你能够更专注于实现业务逻辑。

spring-framework v6.2.3版本更新了什么

Spring Framework v6.2.3版本带来了多项重要更新,包括对MockMvc Kotlin DSL的表单字段支持、ProblemDetail的可序列化实现、对测试类的@MockitoSpyBean的类型级支持等。此外,该版本还优化了默认属性编辑器的分配,增强了对HTTP/2连接的WebSocket升级支持。

更新日志

⭐ 新特性

  • 为MockMvc Kotlin DSL添加表单字段支持
  • 使ProblemDetail实现Serializable
  • 在测试类的类型级别支持@MockitoSpyBean
  • 将TestExecutionListener实现的顺序值暴露为常量
  • ContentDisposition应以不区分大小写的方式匹配属性
  • 在ServletRequestPathUtils中提供对servletPath的访问
  • 使用ConversionService将POJO转换为数组以进行SpEL varargs调用
  • 提供更具可操作性的CGLIB错误消息
  • 在Servlet容器的onError回调中将断开连接的客户端异常包装为AsyncRequestNotUsableException
  • 支持RFC 8441 WebSocket升级与HTTP/2 CONNECT
  • 优化bean实例创建的默认属性编辑器分配
  • 当当前bean已经在创建中时继续预实例化
  • 允许过滤ObjectProvider#stream()返回的bean实例
  • GenericConversionService为部分不可解析的泛型类型找到错误的转换器
  • 避免在通过BeanFactory解析处理程序时重新创建HandlerMethod
  • UrlResource应宽松处理不支持HEAD的HTTP端点
  • 为处理Fallback和'defaultCandidate=false' beans添加API对应项
  • 添加对多维数组的支持
  • 为ServerResponseResultHandler添加getter
  • 改进当无法通过类型选择Bean Override时的诊断
  • 由于缺少上下文类上的注解类型,表达式性能回归

🐞 Bug修复

  • PathMatchingResourcePatternResolver在类路径中对非jar文件失败
  • 自6.2.0以来,无法在多层接口继承中正确获取泛型
  • 测试Bean Overrides尊重fallback限定符而不是@Primary语义
  • 如果查询参数名称包含冒号,HTTP接口客户端引发IllegalArgumentException
  • Quartz风格的Nth Day of Week cron表达式可能溢出到其他月份
  • 嵌入Tomcat时,组件扫描未能找到WEB-INF/classes中的jar条目
  • 访问UserDestinationResult中的sessionIds时检查hasNext
  • 对实现Iterable的Map的属性绑定不再有效
  • GenericTypeResolver返回EmptyType
  • 在升级到Spring 6.2.2时,在@Nested测试类层次中发现重复的BeanOverrideHandler
  • AnnotationBeanNameGenerator对显式别名的value属性发出警告
  • 停止假设AspectJ Advice的第一个参数是JoinPoint
  • 对于简单类型List/Map/Array和嵌套容器组合,构造函数绑定失败
  • Spring Framework 6.2.x中BeanFactoryUtils.beanNamesForTypeIncludingAncestors()行为的变化导致ClassCastExceptions
  • 数据绑定未过滤构造函数绑定的HTTP头
  • 嵌套占位符中的转义字符未正确检测,导致无效部分
  • ReflectJvmMapping.getKotlinFunction对Kotlin属性返回null
  • ConfigurationClassEnhancer应在CGLIB Enhancer上显式设置自定义ClassLoader
  • Spring Web MVC控制器中的RestTemplate调用的连接重置异常被忽略
  • AsyncExecution未能检测带有泛型的接口中注解方法的返回类型
  • 确保WebFlux方法验证时可用Locale上下文

📔 文档

  • 修复参考文档中对ApplicationContext#getAutowireCapableBeanFactory的引用
  • 澄清带有@Lookup方法的抽象类的组件扫描
  • WebSocket STOMP参考文档的小更新
  • 澄清在没有响应体的POST场景中使用RestClient的文档
  • 记录StandardWebSocketSession中localAddress的端口限制
  • 修复字段反射提示的Javadoc
  • 改进SpringProperties.getFlag()的Javadoc
  • 链接到当前的AspectJ Javadoc
  • 更新SimpleCommandLinePropertySource的Javadoc
  • 更新RestClientException Javadoc以参考RestClient
  • 记录TestExecutionListener实现的顺序值
  • 记录自定义HttpServiceArgumentResolver的用法

🔨 依赖升级

  • 升级到Micrometer 1.14.4
  • 升级到Reactor 2024.0.3
  • 升级到RSocket 1.1.5

总结

在Spring Framework v6.2.3版本中,开发者可以期待一系列新特性和修复,包括对Kotlin DSL的支持、Bug修复以及文档的改进。这些更新不仅提升了框架的稳定性和可用性,还为开发者提供了更强大的工具,以应对复杂的开发需求。