2024年Spring年度回顾 - 2024年12月31日

工程 | Josh Long | 2024年12月31日 | ...

Spring的各位粉丝们,新年快乐!又到了《Spring年度回顾》栏目!

回首2024...

我写下这篇回顾时,正坐在马提尼克岛(法属加勒比海的一个美丽岛国)一座俯瞰着葱郁丛林的桌子旁。我一边呷着马提尼克朗姆酒,享受着半烘烤的热带气候,一边回想已经过去的2024年。每年的这个时候,自2011年起,我都会撰写这篇《Spring年度回顾》,以一种简洁的方式回顾过去的一年。

今年发生了太多令人惊叹的事情。很难 pinpoint 任何一件特别突出的事情。但我会努力将其精简。精简为五件。正如我一贯所做的那样。

我们也会像往常一样,在下方提供本周的精选内容。

那么,从哪里开始呢?请记住,这 meant to be a roundup of the things that most impressed. The things that most took my breath away. 而不是一个罗列最新事物的列表。今年有很多符合这一标准的神奇事物。让我们直接切入正题。

Spring AI

拜托,您肯定预料到了。我可是 Spring AI 的贡献者!它非常棒,并且每时每刻都在变得更好!Spring AI 是一个端到端集成通用 AI 工程模式的综合框架。它通过利用 Spring 的四大支柱:AOP、可移植服务抽象、依赖注入和自动配置,为构建 AI 驱动的系统和服务提供了强大的支持。

而且,它甚至还走在许多新颖而令人惊叹的协议的前沿,MCP - Model Context Protocol - 允许您将任意数据源集成到您的 LLM 模型中。Spring AI MCP (至少目前而言)是 Spring AI 的一个子项目,使得生成和消费 MCP 服务变得轻而易举。

在中文里,‘爱’是 ‘ai’。‘我’是 ‘wo’。所以:wo ai AI!

Spring Modulith

听着,我最头疼的事情之一就是看到太多代码库违背了良好的面向对象设计原则,使用了像 app.controllersapp.servicesapp.modelsapp.repositories 等之类的包结构。为了让这种模式奏效,每一个类型(控制器除外)都需要是 public。为什么?这是一种反模式!如果您只打算将所有东西都设为公共,为什么还要使用一个不错的面向对象语言呢?面向对象的目标就是信息隐藏。如果您希望一切都有效地公开,在一个扁平的全局命名空间中,那就直接使用 C 语言吧!至少那还更诚实一点。

但有什么替代方案呢?有很多其他方法可以指导您实现更清晰的架构,而我最喜欢的之一就是 Spring Modulith。Spring Modulith 为您提供了使用 Spring 构建清晰、模块化代码库的工具。它扩展了框架,增加了基础设施,使模块化解耦更容易。而且,通过使用约定和 ArchUnit 支持的测试,它允许您扩展 Java 语言,增加一层新的验证级别,以确保您不会无意中将一个根包(一个“模块”)的实现细节暴露给另一个包。

相信我(我之所以是贡献者是有原因的!):一旦您使用了 Spring Modulith,您就不会想回到过去了!您的代码将更清晰,架构更具长期性,您也会更有信心不会意外地向其他潜在的依赖者做出无法兑现的承诺!

Spring gRPC

这是一个新的实验性项目(但它已经在 Spring Initializr 上了!),它允许您使用 Spring Boot 快速轻松地搭建 GraalVM 就绪的 gRPC 服务!您只需在 proto 文件夹中定义您的 proto 服务定义。您还需要知道什么?前往 start.spring.io,选择 gRPC,然后点击生成。使用您的构建工具构建项目,它将生成服务存根,然后您可以在 Spring Boot 项目中实现它们。如果您以通常的方式运行生成的 jar,它将以通常的方式将 gRPC 绑定到一个端口。如果您在类路径中有 spring-boot-starter-web,它将通过 servlet 基础设施公开 gRPC 服务。如果您有 Actuator,它将为您提供关于您服务的指标。而且,很快,如果您使用 spring-boot-starter-security,它将允许您保护您的服务。当然,如果您在 Spring Initializr 上选择 graalvm,它将允许您将应用程序编译成 GraalVM 原生二进制文件!真棒立即试试吧(我将在新年做一个视频!)。

Spring Security

我无法告诉您近来我对 Spring Security 的印象有多深刻。它已经是所有安全、身份验证和授权的一站式商店。但它却一直在变得更容易、更强大。最新版本 - 6.4 - 包括了对以下方面的新的或增强的支持:

  • 完整的 OAuth 套件:OAuth 客户端,OAuth 资源服务器
  • 魔法密码,用户可以通过点击链接立即登录
  • WebAuthn/Passkeys。想让用户仅通过面部识别、指纹识别或外部 USB 密钥登录您的服务吗?别再犹豫了!

而且请记住,Spring Authorization Server 也一直在变得越来越好!最新版本使得搭建一个授权服务器变得微不足道。对于常见情况,它基本上只需要一行代码!您甚至可以混合搭配:拥有一个 Spring Authorization Server,它允许用户将 OAuth 客户端重定向到处理身份验证,然后让用户通过他们的指纹、魔法链接或任何其他方式进行身份验证。太棒了!

性能

使用像 Spring 这样的框架存在着巨大的机遇,因为它位于您和底层运行时之间,这意味着如果我们——Spring 的开发者——能在框架层面进行优化,我们就可以做到,并为所有使用该框架的人带来优势。这是不容错过的绝佳机会!因此,我们一直在寻找能够改进您应用程序的途径。今年也不例外。

今年,我们更是加大了努力。您可能知道 Spring Boot 对 Project CRaC 有很好的支持。我们对 GraalVM 原生镜像也有出色的支持。今年我们推出了集成的 AppCDS 支持,并预览了 Project Leyden 的支持。我制作了一个视频 涵盖了所有这些选项(除了 Project Leyden)。有关 Project Leyden 的详细信息,请查看此视频,该视频 与 Oracle 的 Java 团队合作在 Devoxx Belgium 上发布

嗖嗖!

好了,在介绍了这五个重磅亮点功能后,让我们来看看...

本周精选!

这是您通常的份量,来自我们这个最精彩的社区上周的新鲜事物!

我敢肯定,我代表整个 Spring 团队向您说:新年快乐,我们期待在 2025 年与您相见!!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有