这几天,JetBrains 更新了 IDEA 到 2025.2 版本,有一项更新内容,暂时没有直接在 IDEA 中提供,而是需要通过安装插件来获得,但我认为它是这个版本最重要的更新,它就是 Spring Debugger。

其实绝大部分 Java 开发者,都是 Spring 开发者,Spring 开发中的一些调试痛点也是很多人的共识。所以我看到这个以后便提起了兴趣,看看它到底能做什么。
根据官方帮助文档的介绍,它主要能提供以下几个方面的功能:
- 应用上下文的感知。如感知容器中 Bean 的加载情况,以及 Bean 的名称、类型、作用域等细节信息。
- 属性和配置的分析。如显示配置项的最终生效的值、查找这些值的来源、当前生效的配置文件等。
- 数据库连接和事务。如显示当前生效的数据库连接、查看当前事务的状态和属性等。
下面看几个示例的场景,看看如何把这些方便的功能应用到日常的开发调试中。
当遇到 Bean 注入错误的情况
有时候,我们写完一个 Bean,将它注入到另一个 Bean 中,发现 Spring 自动注入的并不是我们预期中它会注入的 Bean,或者 Spring 并没有注入。这个问题可能是以下几种情况造成的:
- 这个类文件被放在了错误的包中,导致 Spring 没有扫描到。
- 这个 Bean 被某个配置文件中的某个条件排除了。
- 有实现了同一个接口的其他优先级更高的类。
- 其他千奇百怪的原因。
以上列举的几个原因,并不都是那么容易被排查出来的,尤其是当你还不知道是什么原因的时候,不知道从哪儿查起。为了某一个单独的 Bean 的注入错误去 debug 容器初始化的过程,也不现实。这时候 Spring debugger 就能帮上一些忙。
首先,它可以在项目文件树中,展示哪些 Bean 被加载了,并且,每一个类型的 Bean 都有不同类型的图标,没有被加载的 Bean 会显示成灰色。

并且,在调试时,可以查看更多的 Bean 定义信息,如下图:

当你不知道那些生效的配置项的来源的时候
Spring 容器初始化的时候会读取各种各样的配置参数,这些配置参数的值有很多不同的来源,比如环境变量、命令行参数、配置文件,又或者 PostProcessor 等程序内部的处理逻辑,不仅来源众多,他们还有优先级,存在不同来源参数值的覆盖。
因此,当程序启动后加载的配置,跟你写的文件中不一样,或者跟你预期的不一样时,就需要查找这个配置的来源是哪里,它是如何生效的。
Spring debugger 可以在配置文件中,直接显示当前生效的值。

并且,这些值都是可以点击的,可以查看到这些值的来源。
数据库和事务相关的调试功能
Spring debugger 还会自动在 IDEA 的数据库工具窗口,创建出项目中用到的数据库连接。

对于 debug 程序时,进行到事务中的业务逻辑时,也可以在调试窗口直接查看事务的配置属性信息和状态:

其他
除了上述介绍的这些,还有一些更高阶的用法。
比如,在调试工具中使用 Spring 表达式添加观察点和设置条件断点,甚至可以在调试其中直接访问 Bean 的属性和方法。更多的使用方法和技巧有待大家一起探索。如果我发现了些特定场景下的丝滑小妙招,也会继续分享出来,欢迎大家一起讨论。