繁体   English   中英

为类中的任何方法运行额外的代码

[英]Run extra code for any method in a class

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

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

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

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

但是我也对著名的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时,这种方法不是很特殊,但是被广泛使用。

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

    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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM