0
我对自动生成一些锅炉板方法感兴趣(类似于龙目岛项目)。 Byte Buddy友好API似乎很有前途,但我不确定如何去使用它。自动生成现场方法
这是一个简单的用例。可以说,我有一个类User.java
public class User {
private String name;
}
我打算用这将有产生getter和setter这个的实现注释修饰这个类。使用字节伙计,我试过如下:
public class MethodInterceptor {
public static void main(String[] args) throws Exception {
User user = new ByteBuddy()
.subclass(User.class)
.defineMethod("getName", String.class, Visibility.PUBLIC)
.intercept(FieldAccessor.ofBeanProperty())
.defineMethod("setName", Void.TYPE, Visibility.PUBLIC)
.withParameter(String.class)
.intercept(FieldAccessor.ofBeanProperty())
.make()
.load(User.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded().newInstance();
user.getClass().getDeclaredMethod("setName").invoke("Jaypal");
Method m = user.getClass().getDeclaredMethod("getName");
System.out.println((String) m.invoke(null));
}
}
但是,我得到一个异常
Exception in thread "main" java.lang.NoSuchMethodException: scratchpad.User$ByteBuddy$n0KYCYB5.setName()
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at scratchpad.MethodInterceptor.main(MethodInterceptor.java:22)
注:我知道,龙目岛项目不支持这一点,但是这只是一个实验。我对另一个项目的注释驱动代码生成更感兴趣。这只是一个简单的例子,我试图看看Byte Buddy是否适合这种用例。
任何帮助或指导将不胜感激!
哦,废话。对于那个很抱歉。但是我必须说一下你在ByteBuddy写的美丽的图书馆。非常感谢! –
我们如何绕过我在运行时生成的方法的编译时检查?我想要做的是注释字段,它将在运行时基于注释创建方法。不过,我希望我的测试能够使用这些方法,但编译器会因为尚未定义的方式而受阻碍。抱歉发布其他问题作为评论。 –