调用注入的方法

时间:2014-09-03 20:28:33

标签: javassist

每当我使用此方法使用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()"

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

抛出错误是因为有了 Method method = targetClass.getClass().getDeclaredMethod(methodName);
您正在getClass()对象上调用CtClass,但您应该在targetClass.toClass()生成的类上调用。
您必须以这种方式重构代码:

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

并重写

  1. addMethod()删除targetClass.toClass()
  2. 使用标准invokeMethod()
  3. 更改java.lang.Class的第一个参数