对话 Josh Long:Kotlin 与 Spring 生态系统的演进与协同
“现在是成为 JVM 或 Spring 开发者的最好时机。”
Spring 开发者代言人 Josh Long
Josh Long 是首位 Spring 开发者代言人(Developer Advocate),自 2010 年起担任该职位。Josh 是一位 Java Champion,著有 7 本书(包括《Reactive Spring》),制作了众多畅销的视频培训课程(包括与 Spring Boot 联合创始人 Phil Webb 合作的《Building Microservices with Spring Boot Livelessons》)。他也是一位开源贡献者(涉及 Spring Boot、Spring Integration、Axon、Spring Cloud、Activiti、Vaadin 等项目)、YouTuber(拥有《Coffee + Software with Josh Long》和《Spring Tips》系列)以及播客主持人(《A Bootiful Podcast》)。
在过去的十年里,Spring 生态系统经历了巨大的演变,从传统的企业级应用到微服务、分布式系统,再到如今的 AI 驱动型服务。很少有人能像 Josh Long 那样近距离见证这一演变,他自 2010 年起就一直担任 Spring 的首位开发者代言人。
在 KotlinConf'26 大会召开前夕,我们与 Josh 探讨了 Spring 社区的发展历程,以及为什么 Kotlin 会成为 Spring 开发者的不二之选,并讨论了他认为现在是基于 JVM 进行构建的最好时机的理由。
在 KotlinConf'26 与 Josh Long 见面
问:您从 2010 年起就担任首位 Spring 开发者代言人。在这段时间里,Spring 社区发生了怎样的变化?
Josh Long: 当时,人们构建的大多数东西基本上都是 Web 应用。而如今,除了 Web 服务和后端服务器应用,人们对这些应用的功能要求也越来越高。
人们引入应用的使用场景也在不断扩大。以前,Spring 主要聚焦于企业级服务端领域。今天,我们谈论的是微服务、分布式计算系统、批处理、集成以及各种安全需求。
现在,我们还要谈论 AI。
这些在过去可能是不同的职业和职业路径,但今天,通过 Spring,所有这些都可以非常自然地实现——在很多情况下,与某些替代方案相比,这种实现方式非常优雅。
因此,社区也随之发生了变化。人们所做的事情范围扩大了,围绕这些工作的社区也壮大了。
换句话说,并不是 2010 年做这些事的人停止了工作,而是做其他类型工作的人加入了这个社区。
这体现在开源项目、语言选择(例如 Kotlin)以及整个生态系统中。这是一个美妙的开源“流散地”。
“人们需要处理的事务范围扩大了,社区也随之壮大。”
问:如您所言,Spring 和 Kotlin 团队一直在努力确保 Kotlin 和 Spring Boot 能够提供一流的开发体验。在您看来,什么才是一个框架生态系统中真正的“一流语言”?
Josh: Spring 是一个构建在 JVM 之上的框架。Spring 本身大部分是用 Java 编写的,因为我们在 2001 年创建 Spring 时,Java 是人们使用的唯一语言。
但我们一直致力于在集成方面做到极致。我们希望 Spring 成为 JVM 及其运行语言上的“模范公民”。
如果你是一名 Java 开发者,我们希望 Spring 感觉自然且符合习惯。任何懂 Java 的人看到 Spring 代码,都应该能立即理解其中的逻辑。
所有的集成也是如此。Spring 与数十种库和技术协同工作,我们希望这些集成感觉连贯且一致。
这一原则同样适用于语言。
“如果我们支持某种语言,我们希望 Spring 对那些已经使用该语言的人来说感觉自然。这一点对于 Kotlin 来说绝对是成立的。”
长期以来,我们的目标仅仅是成为这些语言之上的好公民。我们并不指望语言为了我们而做出改变。
十多年前,当 Spring 和 Kotlin 团队开始建立联系时,我们发现他们极其务实且富有协作精神。他们真心希望 Kotlin 能为 Spring 开发者提供出色的支持。
这种合作关系是一种真正的荣幸。
我最喜欢的例子之一是 Kotlin 的 all-open 插件。
在 Kotlin 中,类默认是 final 的。但像 Spring 和 Hibernate 这样的框架依赖于子类化。
所以通常你必须将所有内容声明为 open。Kotlin 团队通过创建一个编译器插件解决了这个问题。当你使用 Spring 注解时,这些类在底层会被隐式地处理为 open。
开发者不需要改变任何东西——如果你去 start.spring.io,它已经配置好了。
“正是这成千上万个微小的改进,清晰地表明了这门语言希望让 Spring 开发者感到舒适。想到这种美妙的团队协作,我感到温暖、感激且快乐。”
问:当您真正用 Kotlin 构建 Spring 应用时,与用 Java 构建相比,哪里会有明显的不同?
Josh: Spring 有 DSL(领域特定语言)。这些 DSL 在 Java 中已经尽可能优雅了,但 Kotlin 在设计 DSL 方面拥有更具表现力的语言特性。这不是什么争议性的观点,这只是一个经验事实。
Spring 团队拥抱了 Kotlin。我们实际上在 Spring 自身中使用了 Kotlin 代码。我们已经用 Kotlin 编写了 Spring 的部分内容。
我们提供的一些 Java DSL 也有对应的 Kotlin 版本,而且这些 Kotlin DSL 要好用得多。
例如,Spring Cloud Gateway、函数式 HTTP 路由,以及 Spring Framework 7 中新的 BeanRegistrar API。这样的例子很多,Spring Security 也有一个。它们无处不在。
它确实是一门非常出色、优雅的小巧语言。
我们本质上做了两次构建 DSL 的工作——一次为 Java,一次为 Kotlin——因为我们希望 Kotlin 版本感觉更棒、更符合习惯且自然。这种感觉真的很棒。
问:对于刚接触 Spring 的 Kotlin 开发者,他们最常见的误解是什么?哪项特性通常能赢得他们的青睐?对于那些还没尝试过 Kotlin 但非常热爱 Spring 的人,为什么他们应该尝试一下 Kotlin?
Josh: 我想这些开发者可能存在的误解与任何人可能有的误解是一样的。
如果你正在使用 Spring,你当然不必只使用 Java。Spring 一直试图拥抱不同的语言。
“Kotlin 无疑是我们在这方面拥有的最佳案例。”
人们可能没有意识到,大约十五年前我们曾有一个 Spring for Scala 项目。我们也尝试过 Groovy。虽然我个人从不使用,但你今天仍然可以使用 Groovy。
Kotlin 确实是一个非常自然的契合点。
Spring 真正将某种语言纳入 Spring Framework 本身作为代码库一部分的,只有 Kotlin。
所以我一直都在使用 Kotlin。
问:您花了多年时间帮助开发者驾驭新技术。目前基于 JVM 进行构建,最让您兴奋的是什么?
Josh: 首先,我们今天在 JVM 上拥有的语言非常有竞争力。
如果你现在要构建一些东西,像 Kotlin 这样的语言与许多其他现代语言一样简洁、小巧且高效。它们易于理解,而且由于运行在 JVM 上,它们还带来了许多额外的优势。
JVM 本身速度极快且高度可扩展。它是极少数能同时实现程序既小巧又快速的平台之一。
过去存在一种权衡。当我刚开始工作时,如果你想快速编写程序,你会使用 Python 或 Perl 这样的脚本语言;如果你想要高性能,你会使用 C++ 之类的语言。
但现在,随着 Kotlin 等语言在 JVM 上运行,你可以兼得两者。你可以编写像脚本语言一样简洁的程序,同时获得接近原生语言的性能。
我们生活在一个了不起的时代。
这里还有第二部分。因为我们拥有这种出色的运行时基础设施和语言生态系统,人们正在其上构建令人难以置信的工具和框架,以支持新型应用。
例如,我花了很多时间与人们讨论 AI。Spring AI 是构建 AI 集成、智能体系统以及与 AI 模型集成的非常好的方式。
“如果 10 或 15 年前你告诉我,我们将用 Kotlin 编写五行代码的 Spring 应用,就能与 AI 模型对话并完成有趣的事情,我会笑出声来。那听起来是不可能的。世界现在大不相同了。对于 JVM 开发者或 Spring 开发者来说,现在也是最好的时机。”
问:随着 AI 驱动应用的快速增长,今天在 JVM 上构建 AI 驱动的系统是什么样子?Kotlin 和 Spring 在其中扮演什么角色?
Josh: 我认为人们有时对 AI 存在误解。
当人们谈论 AI 时,他们经常混淆两个非常不同的用例。
一种涉及构建和训练模型。这类工作通常使用的工具在目前的 JVM 上并不真正存在。
“构建自己的模型、训练它们并进行数据科学研究,与生态系统中 99% 的人将要做的事情相比,是一个非常罕见且狭窄的用例,那就是将这些模型集成到他们的业务应用中。大多数模型只是 REST API,这意味着这是一个集成问题。”
对于大多数应用而言,利用 AI 就是将这些模型集成到现有系统中,而 JVM 在这方面一直表现极其出色。
这就是企业使用它的原因——它可以与任何东西对话。
今天,我们有了 Spring AI,它使构建这些集成变得更加容易。当然,JVM 上还有其他生态系统,它们有自己构建 AI 应用的方法。
有很多不错的选择。
但重要的是,JVM 不仅仅是像 Python 或 TypeScript 那样能够胜任构建这些系统的工作。在许多情况下,它实际上要好得多。
最近有一个基准测试观察了模型上下文协议(Model Context Protocol)实现的性能。JVM 名列前茅。Spring Boot 和 Spring AI 的性能表现最佳。
他们比较了 Go、Python 和 TypeScript 的实现,而 JVM 的表现最好。
所以这不仅仅是能否在 JVM 上完成这项工作的问题。在许多情况下,它的性能要高得多。我们还拥有更好的安全性和与现有系统的更强集成。
这对该生态系统中的开发者来说是一个巨大的机会。
人们经常忽略的另一件事是,许多 AI 项目失败是因为它们没有与现有系统正确集成。
有一项麻省理工学院的研究表明,大约 90% 的 AI 集成项目以失败告终。
这并不令人惊讶——许多团队将 AI 工作流构建为完全独立的系统(通常使用 Python),这些系统无法很好地与他们的其余基础设施集成。
但如果你扩展业务逻辑已经存在的系统(通常在 JVM 上),事情往往会顺畅得多。
如果你使用 Spring AI 和 Kotlin 等工具来扩展这些现有服务,你通常会获得好得多的体验。
所以这不仅仅是关于是否能达到其他生态系统的水平。在许多情况下,JVM 在这类工作上就是更胜一筹。
正如 Josh 所指出的,许多新技术(包括 AI)最终都归结为它们与开发者现有系统的集成效果。
Josh 将在他的 KotlinConf'26 演讲“Bootiful Kotlin” 中深入探讨 Kotlin 和 Spring Boot 如何协同工作以创造更简洁、更高效的开发者体验。
不要错过 KotlinConf'26 上的 Josh Long!