温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Proxy 代理如何调试

发布时间:2026-10-09 15:32:17 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Java 里,“Proxy 代理”通常有两种常见含义,调试方式不太一样:


一、JDK 动态代理(java.lang.reflect.Proxy)

1. 开启代理类源码输出(最常用)

JDK 动态代理在运行时生成 .class 文件,默认不会落盘。

方式一:JVM 参数(推荐)

-Dsun.misc.ProxyGenerator.saveGeneratedFiles=true

(Java 8 及以前)

-Djdk.proxy.ProxyGenerator.saveGeneratedFiles=true

(Java 9+)

生成的代理类在:

com/sun/proxy/$ProxyN.class

2. 反编译查看代理类

用 IDEA / jd-gui / cfr 反编译:

$Proxy1 extends Proxy implements YourInterface {
    public void doSomething() {
        h.invoke(this, m3, null);
    }
}

3. 在 InvocationHandler 里打断点

public Object invoke(Object proxy, Method method, Object[] args) {
    // 在这里断点
    System.out.println(method.getName());
    return method.invoke(target, args);
}

4. 日志 / AOP 调试

System.out.println("before: " + method.getName());
Object result = method.invoke(target, args);
System.out.println("after: " + method.getName());

二、CGLIB / Spring AOP 代理

1. 查看是否使用了代理

System.out.println(obj.getClass().getName());
// 类似:com.xxx.Service$$EnhancerByCGLIB$$...

2. 开启 CGLIB 调试

-Dcglib.debugLocation=/tmp/cglib

会生成 .class 文件,可反编译。

3. Spring AOP 调试技巧

  • 开启日志:
logging:
  level:
    org.springframework.aop: DEBUG
  • 在 @Around / @Before 中打断点
  • 检查代理类型:
AopUtils.isAopProxy(bean);
AopUtils.isCglibProxy(bean);
AopUtils.isJdkDynamicProxy(bean);

三、网络代理(HTTP / SOCKS Proxy)

如果你是问 网络代理调试:

1. 打印代理信息

System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");

System.out.println(System.getProperty("http.proxyHost"));

2. 抓包

  • Charles
  • Fiddler
  • Wireshark

3. JVM 网络调试

-Djavax.net.debug=all

四、常见坑

  • 私有方法不会被 JDK / CGLIB 代理
  • this.xxx() 不会走代理
  • 接口代理只能代理接口方法

如果你能说明是 哪一种 Proxy(动态代理 / Spring AOP / 网络代理),我可以给你更具体的调试步骤。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手