[英]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.