Как запустить совет аспекта для метода, который вызывается другим методом в том же классе - PullRequest
0 голосов
/ 06 января 2012

Я испытываю беспокойство по поводу Spring AOP. Я пытаюсь вызвать метод с использованием аспекта, но метод, который вызовет аспект, также является методом того же класса, и аспект не работает (кстати, ошибок нет). Нравится это

class A extends Runnable{
  public void write(){
      System.out.println('Hi');
  }

   public void run(){
       this.write();
   }

}

<aop:after-returning  method="anyMethod" pointcut="execution(* A.write(..))"/>

Любые идеи будут оценены

Спасибо

Ответы [ 3 ]

1 голос
/ 06 января 2012

Тот факт, что рекомендуемый метод вызывается в другом потоке, не имеет значения. Просто убедитесь, что экземпляр, который вы передаете потоку, создан контекстом приложения Spring, а не кодом вашего приложения.

Кроме того, поскольку вы советуете метод, объявленный в классе, а не интерфейс - write() - вам необходимо выполнить ткачество во время загрузки (и иметь cglib в вашем пути к классам).

0 голосов
/ 27 июня 2015

Как сказал Абхишек Чаухан , Spring AOP основан на прокси и, следовательно, не может перехватывать прямые вызовы на this.someMethod().Но хорошей новостью является то, что вы также можете использовать полнофункциональный AspectJ в приложениях Spring с помощью ткачества во время загрузки, как описано в руководстве Spring .Таким образом, вы можете избавиться от ограничений и даже от всех издержек прокси, потому что AspectJ не нуждается в прокси.

0 голосов
/ 22 июня 2015

Это потому, что Spring AOP основан на прокси.Вы используете прокси для делегирования вызовов базовому объекту.Однако, когда метод нижележащего объекта выполняет вызов другого метода внутри него того же класса (ваш сценарий использования), прокси-сервер не появляется и, следовательно, то, что вы пытаетесь достичь, невозможно.Есть некоторые обходные пути, но они убивают саму цель АОП.

Более подробную информацию вы можете найти здесь.

http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies

...