You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在STS/Eclipse调试模式下查看Target Class代理变量属性?

解决Spring CGLIB代理对象在STS/Eclipse调试中看不到真实属性的问题

针对你遇到的三个问题,我来逐一解答:

1. 是否缺少可查看此类代理变量的插件?

不需要额外安装插件。STS和Eclipse本身就支持调试Spring的CGLIB代理对象,只是默认视图显示的是代理外壳,真实的目标对象藏在代理的回调结构里,需要手动去定位。

2. 是否是操作失误导致?

大概率是调试时没找到正确的入口来查看真实对象,而非操作失误。你看到的SomeClass$$EnhancerBySpringCGLIB$$xxx是Spring生成的CGLIB代理类,它本身不会持有原对象的属性,所有属性值都在被代理的目标实例中。

调试时获取真实对象的两种实用方法:

  • 方法一:通过Spring工具类直接提取
    在STS/Eclipse的调试视图里,右键点击代理变量(比如someClass),选择「Inspect」,然后输入以下表达式并执行:

    org.springframework.aop.framework.AopProxyUtils.getSingletonTarget(someClass)
    

    执行后就能直接看到真实的SomeClass实例及其所有属性值。

  • 方法二:手动遍历CGLIB回调结构
    展开代理对象的CGLIB$CALLBACK_N属性(通常是CGLIB$CALLBACK_0),找到类型为DynamicAdvisedInterceptor的回调对象,再依次展开它的advised -> targetSource -> target属性,这里就是真实的目标实例。

3. 有哪些相关资料可供参考?

  • Spring官方文档中Scoped Proxies章节:详细解释了Spring为自定义作用域生成代理的原因,以及代理的核心工作机制。
  • Spring AOP调试相关内容:里面会涉及代理对象的调试技巧,包括如何在IDE中快速定位目标实例。
  • Eclipse/STS官方调试指南:学习如何利用调试视图的表达式求值功能,快速定位深层嵌套的对象。

另外补充一点:你看到代理对象的toString()能返回正确内容是正常现象——Spring的CGLIB代理会把toString()、hashCode()这类通用方法转发给目标对象执行,所以点击变量时能看到真实结果,但代理类本身的属性都是空的,这是CGLIB代理的设计特性导致的。

内容的提问来源于stack exchange,提问作者Andrew Cotton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 08:52:30