2014-09-03 46 views
0

每當我創建一個新的方法,使用這種方法了Javassist調用注入法的

public static void addMethod(CtClass targetClass, String code) throws Exception { 
    CtNewMethod.make(code, targetClass); 
    targetClass.toClass(); 
    logger.info("Method Successfully created in " + targetClass.getName()); 
} 

,後來嘗試用

public static void invokeMethod(CtClass targetClass, String methodName, Object...args) throws Exception { 
    Method method = targetClass.getClass().getDeclaredMethod(methodName); 
    method.invoke(targetClass, args); 
} 

我得到的異常「java.lang.NoSuchMethodException調用它:Javassist進行.CtClassType.testMethod()「

有人知道我在做什麼錯嗎?

回答

0

誤差與
Method method = targetClass.getClass().getDeclaredMethod(methodName);
您在CtClass對象上調用getClass()因爲拋出的,但你應該對targetClass.toClass()生成的類調用。
你要調整你的代碼是這樣的:

CtClass targetClass = new CtClass(); 
addMethod(targetClass, method1Code); 
addMethod(targetClass, method2Code); 
Class<?> k = targetClass.toClass(); 
invokeMethod(k, ...); 

和重寫

  1. addMethod()去除targetClass.toClass()
  2. 變化invokeMethod()的第一個參數與標準java.lang.Class