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寫的美麗的圖書館。非常感謝! –
我們如何繞過我在運行時生成的方法的編譯時檢查?我想要做的是註釋字段,它將在運行時基於註釋創建方法。不過,我希望我的測試能夠使用這些方法,但編譯器會因爲尚未定義的方式而受阻礙。抱歉發佈其他問題作爲評論。 –