Совет при вызове метода из другого модуля

У меня есть три разных модуля maven:

  • security-api, который содержит аннотацию и аспект.
  • модуль, скомпилированный с классами печи из «security-api».
  • клиент, который вызывает через API аннотированный метод из «модуля».

Все будет работать внутри одной и той же JVM.

Из "модуля"

@Authorization
public String getString(Subject s) {
  return "hello";
}

Аспект в "security-api"

@Aspect
public class AuthorizationAspect {
    @Pointcut(""
    + "execution(* *(org.apache.shiro.subject.Subject, ..)) && "
    + "@annotation(com.company.Authorization) && "
    + "@this(c)")
    public void cutAuthorize(Authorization c) { }

    @Before("cutAuthorize(c)")
    public void callFromAuthorizeBefore(Authorization c) {
        System.out.println("> " + c);
    }
}

Итак, что я хочу, так это то, что когда я вызываю getString(subject) из другого модуля, я хочу запустить cutAuthorize(). Я могу выполнить это, указав точку вызова, но это перехватывается только в том случае, если вызов происходит в том же модуле, т.е. если я вызываю аннотированный метод внутри «модуля», все в порядке, но поскольку я вызываю из другого метода через интерфейс, совет не проходит.

Кто-нибудь знает, какой pointcut я должен использовать, чтобы посоветовать какой-то код, когда он запускается, а не когда он вызывается? Я не знаю, понятно ли я выражаюсь, но то, что я пытаюсь сделать, немного сложно объяснить.

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

Руи


person rpvilao    schedule 27.05.2011    source источник


Ответы (1)


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

person Sean Patrick Floyd    schedule 27.05.2011
comment
Привет. Спасибо за ответ. Это не так. Смотрите, если я не пытаюсь выставить аннотацию к методу, все работает. Проблема в @this(c). Итак, как открыть аннотацию для использования внутри callFromAuthorizeBefore? - person rpvilao; 27.05.2011