如何在建议中调用超类方法?

时间:2015-05-17 00:11:13

标签: java inheritance aspectj super

我正在开发一个项目,旨在在不直接更改源代码的情况下在代码库中引入修改,这些更改已经实现,我正在用AspectJ重写代码

到目前为止,我设法使用AspectJ实现所有更改。但我不知道如何实现它:

  • 有一个名为beforeCadastrarAndValidate ()的方法被子类覆盖。在此方法的最后插入了以下行:super.beforeCadastrarAndValidate ()
  • 这行代码从超类调用该方法。我可以捕获这个方法的执行,但我不知道如何调用超类的方法。我已经搜索过了,我知道在建议中称“超级”是不可能的。我也试过使用Reflection,但我还没有找到解决方案。

我有办法做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用反射从超类中调用它。

import java.lang.reflect.Method;

class Person {
  public void greet() {
    System.out.println("Person's greet");
  }
}

class Employee extends Person {
  public void greet() {
    System.out.println("Employee's greet");
  }
}

class Main {
  public static void main(String[] args) 
        throws Exception {
    // get the method object from Person class.
    Method g = Person.class.getMethod("greet",
                     new Class[0]);

    Employee e = new Employee();
    // When "g" is invoked on an "Employee" object, 
    // the "Employee.greet" method is called.
    g.invoke(e, null);
  }
}

参考:https://blogs.oracle.com/sundararajan/entry/calling_overriden_superclass_method_on