2

每次在特定 Java 类中调用任何方法时,我都想运行一些代码,但不想触及实际的方法主体。这是因为有很多方法经常更改,编写这些方法的人不必担心将我的代码添加到每个方法中......即使它只是调用另一个方法的一行。

我想不出一种通过继承来实现这一点的方法,所以我想知道反射是否可行?甚至根本没有?

可以获取类中的方法列表,检查它们的属性,甚至调用它们。但是我没有看到任何可以让您附加额外代码的东西,例如事件处理程序。也许Java是这样的错误语言..

4

2 回答 2

1

这是非常常见的行为,其中面向方面的编程绝对是正确的选择。

但我也对著名的 CMS 如何做到这一点印象深刻。

对于每个包含具体方法的类,您可以拥有一个属性(方法列表),其中包含您要在方法调用之前执行的代码。

您可以编写一个registerBeforeCall(Method m)方法,该方法采用一个方法并添加到列表中。

您的方法应该在第一行包含一个 for 循环(遍历方法列表)并逐个调用每个方法。

如果调用中有任何异常,请不要忘记尝试并捕获并忽略异常。

例如:

public void myActualMethod(){
    for(Method m : registeredMethodsToCallBeforeActualCode){
        m.invoke();
    }

    //my actual code

    // here you can also write a for loop to execute all the methods which you want to call after your actual code is executed.

}

这种方法不是很特别,但是在你不选择 AOP 的时候被广泛使用。

于 2013-09-27T11:38:22.220 回答
0

通过继承实现它的一种方法是:

    public SuperClass {

       public void doSomething() {
          doBefore();
          doSpecific();
          doAfter();
       }

       protected abstract void doSpecific();

    }

    public SubClass extends SuperClass {
       protected void doSpecific() {
          System.out.println("Do specific implementation....");
       }
    }


public static void main(String[] args) {
   SuperClass clazz = new SubClass();
   clazz.doSomething();
}
于 2013-09-27T10:06:26.120 回答