Моя (AspectJ) банка не распознает суставы - PullRequest
0 голосов
/ 18 февраля 2012

Среда: простое автономное Java-приложение.AspectJ баночка внутри.

У меня два проекта.Первый, скажем, «A» содержит пользовательскую аннотацию области действия метода и аспект, который отвечает за выполнение некоторой задачи при вызове метода.

Аннотация:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AccessibleForRole {

    String value() ;

}

аспект:

public aspect AccessibleListener {

pointcut verifyRole(): 
    (
            call(@AccessibleForRole * *())          
    );

    before() : verifyRole() { // do something
    }
}

Я сделал JAR-файл с этими аннотациями / аспектами.

После этого я создаю класс модели в проекте А. Я аннотирую метод с помощью моей аннотации,запустите программу, и я вижу аспект, перехватывающий событие и работающий над ним.

public class Model {

    @AccessibleForRole("admin")
    public void addUserToApplication(){
        System.out.println("in Model.addUserToApplication.");
    }
}

Он работает нормально .... но .... Если я создаю второй проект, проект 'B' использует jar 'А, и я создаю новые классы, с помощью методов, которые я аннотирую (например, модель), кажется, что ничего особенного не происходит.Ничего не перехватывается.

Можно ли в будущем создать что-то, что должно быть перехвачено с помощью AspectJ из проекта A jar, без перекомпиляции?

Заранее спасибо,

1 Ответ

1 голос
/ 19 февраля 2012

Проблема решена.Благодаря плагину Maven: http://mojo.codehaus.org/aspectj-maven-plugin/libraryJars.html

<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>

Я поставил:

<aspectLibraries>
    <aspectLibrary>
       <groupId>myGroupId</groupId>
       <artifactId>jarA</artifactId>
    </aspectLibrary>
</aspectLibraries>

И при сборке или запуске код из проекта B правильно перехватывается аспектом, определенным в jarA.

Надеюсь, это поможет.

...