微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ByteBuddy拦截构造函数参数

如何解决ByteBuddy拦截构造函数参数

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

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)注释的参数即可。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。