关于构造方法和before的执行顺序的问题

Author: myzhanCreated Mar 15, 2025Updated Mar 15, 2025

我举个例子

父类代码:

java
public class BaseRequest {

    public String v1;

    public BaseRequest(String v1) {
        this.v1 = v1;
    }
}

子类代码:

java
public class Request extends BaseRequest {

    public String v2;

    public Request(String v1, String v2) {
        super(v1);
        this.v2 = v2;
    }

    @Override
    public String toString() {
        return v1+v2;
    }
}

我在尝试用jvm-sandbox拦截子类构造函数,代码如下:

java
new EventWatchBuilder(moduleEventWatcher)
                .onClass("com.alibaba.interceptee.Request")
                .onBehavior("<init>")
                .withParameterTypes(String.class, String.class)
                .onWatch(new AdviceListener() {
                    @Override
                    protected void before(Advice advice) throws Throwable {
                        advice.changeParameter(0, "hello");
                        advice.changeParameter(1, "world");
                    }
                });

发现并不能修改父类中v1的值,这是为什么呢?