Java 为类中的任何方法运行额外代码
每次在特定Java类中调用任何方法时,我都想运行一些代码,但不想触及实际的方法体。这是因为有很多方法经常更改,编写这些方法的人不必担心将我的代码添加到每个方法中。。即使只是一行调用另一个方法 我想不出用继承来实现这一点的方法,所以我想知道用反射是否可行?甚至是根本没有Java 为类中的任何方法运行额外代码,java,reflection,Java,Reflection,每次在特定Java类中调用任何方法时,我都想运行一些代码,但不想触及实际的方法体。这是因为有很多方法经常更改,编写这些方法的人不必担心将我的代码添加到每个方法中。。即使只是一行调用另一个方法 我想不出用继承来实现这一点的方法,所以我想知道用反射是否可行?甚至是根本没有 可以获取类中的方法列表,检查它们的属性,甚至调用它们。但我没有看到任何允许附加额外代码的东西,例如事件处理程序。也许Java对于这样的东西是错误的语言。通过继承实现它的一种方法是: public SuperClass {
可以获取类中的方法列表,检查它们的属性,甚至调用它们。但我没有看到任何允许附加额外代码的东西,例如事件处理程序。也许Java对于这样的东西是错误的语言。通过继承实现它的一种方法是:
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();
}
这是非常常见的行为,面向方面编程绝对是正确的 但我也对著名的CMS的做法印象深刻 对于每个包含具体方法的类,可以有一个属性(方法列表),其中包含在方法调用之前要执行的代码 您可以编写一个
registerBeforRecall(方法m)
方法,该方法接受一个方法并添加到列表中
您的方法应该在第一行(遍历方法列表)包含for循环,并逐个调用每个方法
不要忘记放置try-and-catch,如果调用中存在异常,则忽略异常
例如:
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的情况下被广泛使用。您可以使用
AspectJ
。