0

我正在尝试使用 ByteBuddy 和我的自定义构造函数动态创建一个类。我已经阅读了Byte Buddy 的 Intercepting 默认构造函数,并在此基础上编写了以下代码。

Class<?> dynamicType = new ByteBuddy().subclass(Object.class, ConstructorStrategy.Default.NO_CONSTRUCTORS)
                .name("foo").defineConstructor(Modifier.PUBLIC).withParameters(int.class)
                .intercept(
                        to(new Object() {
                            public void construct() throws Exception {
                                System.out.println("before constructor");
                            }
                        })
                        .andThen(MethodCall.invoke(Object.class.getConstructor()))
                        .andThen(to(new Object() {
                            public void construct() throws Exception {
                                System.out.println("after constructor");
                            }})
                        ))
                .make()
                .load(Main.class.getClassLoader(), INJECTION)
                .getLoaded();

        dynamicType.getConstructor(int.class).newInstance(3);

我的问题是如何在调用超级构造函数之前和之后添加的自定义代码中访问“foo”构造函数的整数参数。

4

1 回答 1

1

当然,只需使用注释 @Argument(0) 定义一个参数。

我建议不要使用匿名类,因为它们的包私有可见性可能会产生棘手的结果。

于 2020-11-05T19:06:39.167 回答