AspectJ - pointcut для вызова нативного метода - PullRequest
4 голосов
/ 07 июня 2011

Можно ли установить pointcut при вызове нативного метода с AspectJ? Я попробовал следующий аспект:

public aspect EmailAspect {
    pointcut conn() : call(* java.net.PlainSocketImpl.socketConnect(..));
    before() : conn() {
        System.out.println("Connecting");
    }
}

Но это не работает. Я также не нашел много релевантной информации через поиск в Google (кроме этого http://blog.jayway.com/2007/02/16/static-mock-using-aspectj,, однако неясно, возможно ли это и как это сделать).

Я попытался отладить свой тестовый код (который подключается только к некоторому локальному TCP-порту TCP) в Eclipse, и затмение остановилось на точке останова socketConnect ().

Спасибо.

UPDATE

Это, вероятно, причина:

AspectJ - Плетение во время загрузки, привилегированный аспект и pointcut для частного метода класса JRE

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

PlainSocketImpl находится в банке, предоставленной JDK, верно? Вам может быть полезен вопрос о плетении в банки . Видимо, после того, как вы сплели в своем аспекте, вы должны помнить, что бегите, используя тканые банки, а не оригинал.

1 голос
/ 07 июня 2011

Если это электронное письмо , истинное, то, как только метод объявлен нативным, Java напишет байт-код, который непосредственно перейдет в машинный код C ++ / C.Это означает, что для AspectJ нечего перехватывать, независимо от того, будет ли это время компиляции, время посткомпиляции или время загрузки.

...