带有 Byte 伙伴的简单 getter 调用程序

Simple getter invoker with Byte buddy

我只是在学习字节好友,想创建最简单的 getter 调用程序,但不幸的是我找不到如何做。所以,问题:

我有很多 class 扫描,如果我在 class 中找到一个用 FooAnnotation 注释注释的字段,我必须能够获得该值此字段使用此 class 实例 getter 方法。

这是我的代码:

interface GetterInvoker<T, S> {

    //this method must `return instance.getterMethod()`;
    S getValueFrom(T instance);
}

abstract class AsbtractGetterInvoker implements GetterInvoker {
    //...some logic
}

主要代码

//input
Class<?> scannedClass = ...
Field annotatedField = ....
Method getterMethod = ....

//generating class
Class<?> tempClass = new ByteBuddy()
    .subclass(AsbtractGetterInvoker.class, ConstructorStrategy.Default.IMITATE_SUPER_CLASS)
    .method(named("getValueFrom").and(takesArguments(1)))
    .intercept(???????)
    .make()
    .load(getClass().getClassLoader())
    .getLoaded();

谁能告诉我怎么做?

您可以使用 MethodCall 创建这样的实现,它允许您完全做到这一点。