在Java中,在被调用的方法之前和之后运行一个方法



我正试图编写一个Java程序,以便在调用methodA()后,首先调用一个名为methodBeforeA()的方法,然后执行methodA(。这与Junit使用Annotations(使用@Before、@Test、@After)所做的非常相似,所以我认为使用反射应该是可能的,但我没有很好的线索。

AspectJ允许您在方法进入之前和方法退出之后指定切点。

http://www.eclipse.org/aspectj/doc/released/progguide/starting-aspectj.html

在AspectJ中,切入点挑选程序流中的某些连接点。例如,切入点

call(void Point.setX(int))

选取每个连接点,该连接点是对具有签名void Point.setX(int)的方法的调用,即Point的具有单个int参数的void setX方法。

这需要修改方法代码以插入对其他方法的调用。Java反射允许您做很多事情,但它不允许您动态修改方法代码。

JUnit所做的是不同的。它识别了注释为@Before@Test@After的每个方法,然后按照以下方式执行操作:

for (Method t : testMethods) {
    for (Method b : beforeMethods)
        b.invoke();
    t.invoke();
    for (Method a : afterMethods)
        a.invoke();
}

您当然可以这样做,以确保每次调用有问题的方法后都调用"before"one_answers"after"方法。但您不能强迫所有调用方都这样做。

相关内容

  • 没有找到相关文章

最新更新