使用字节伙伴从头开始创建一个类及其方法



有可能用bytebuddy创建一个全新的类和方法吗?

我看到的所有示例都使用现有的类或对现有方法的截取来修改它们。

有没有任何例子可以构造一个类,通过bytebuddy动态添加一些方法,并返回该类的实例?

所有Java类都需要扩展另一个类,因此至少需要扩展Object.class。使用接口或替换现有类中的方法,可以使它们在不大量使用反射的情况下使用,所以这是许多人所做的。但这不是必要的。

子类Object.class添加您的方法/字段,并委托给您用java编写的实际方法。"Hello World"的例子正是这样做的。

Class<?> dynamicType = new ByteBuddy()
.subclass(Object.class)
.method(ElementMatchers.named("toString"))
.intercept(FixedValue.value("Hello World!"))
.make()
.load(getClass().getClassLoader())
.getLoaded();
assertThat(dynamicType.newInstance().toString(), is("Hello World!"));

Byte Buddy可以创建动态方法体,但在这种情况下,您基本上可以编写java汇编程序。如果你想在这方面得到帮助,你可能想问一个关于你想创建什么的更具体的问题。

如果你能将你的需求融入bytebuddy的annotation/contension/contact/delegate方法,我强烈建议你尝试使用它。你的代码将是可调试的(你可以在delegate中设置断点(,并且是由知道如何编写正确的java汇编程序的人生成的(javac和bytebuady用于粘合(。

最新更新