ByteBuddy 拦截构造函数参数
ByteBuddy intercepting constructor arguments
我正在尝试使用 ByteBuddy 和我的自定义构造函数动态创建 class。
我已阅读 并以此为基础编写了以下代码。
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' 构造函数的整数参数。
当然,只需定义一个带有注释@Argument(0) 的参数即可。
我建议不要使用匿名 类,因为他们的 package-private 可见性可能会导致棘手的结果。
我正在尝试使用 ByteBuddy 和我的自定义构造函数动态创建 class。
我已阅读
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' 构造函数的整数参数。
当然,只需定义一个带有注释@Argument(0) 的参数即可。
我建议不要使用匿名 类,因为他们的 package-private 可见性可能会导致棘手的结果。