Запустите метод до и после вызываемого метода в Java - PullRequest
10 голосов
/ 07 марта 2012

Я пытаюсь написать программу на Java так, чтобы после вызова methodA () сначала вызывался метод с именем methodBeforeA () , а затем methodA () выполняется, за ним следует метод с именем named, methodAfterA () .Это очень похоже на то, что Junit делает, используя аннотации (используя @Before, @Test, @After), поэтому я думаю, что это возможно с помощью отражения, но у меня нет очень хорошей подсказки.

Ответы [ 2 ]

5 голосов
/ 07 марта 2012

AspectJ позволяет указывать точки среза до входа в метод и после выхода из метода.

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

В AspectJ точки выбирают определенные точки соединенияв потоке программы.Например, pointcut

call(void Point.setX(int))

выбирает каждую точку соединения, которая является вызовом метода, имеющего подпись void Point.setX(int), то есть метод Point 'void setX с однимint параметр.

3 голосов
/ 07 марта 2012

Для этого потребуется изменить код метода, чтобы вставить вызовы в другие методы. Отражение Java позволяет вам многое, но не позволяет динамически изменять код метода.

То, что делает JUnit, отличается. Он идентифицирует каждый метод, аннотированный @Before, @Test и @After, а затем делает что-то вроде:

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

Вы, безусловно, можете сделать что-то подобное, чтобы убедиться, что вы вызываете методы «до» и «после» после каждого раза , вы вызываете соответствующий метод. Но вы не можете заставить всех абонентов сделать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...