Проблемы со Spring AOP
От: Trean Беларусь http://axamit.com/
Дата: 08.08.06 13:58
Оценка:
Хочу используя Spring AOP, перехватывать вызовы методов объекта. Все работает за исключением того, что
методы вызванные из другого метода уже не перехватываются (вызов method2 из method1 например).
Как это сделать можно?


ProxyFactory factory = new ProxyFactory();
A a = new AImpl();
factory.setTarget(a);
factory.setProxyTargetClass(true);
factory.addAdvice(new MyBeforeAdvice());
A b = (A)factory.getProxy();
b.method1();


public interface A {

  method1();

  method2();

}

public class AImpl implements A {

  public void method1() {
    method2();
  }

  public void method2() {
  }

}

static class MyBeforeAdvice implements MethodBeforeAdvice {
  public void before(Method m, Object[] args, Object target) throws Throwable {
     System.out.println("Before advice called " + m.getName());
  }
}


Нужно, чтобы вывелось:
Before advice called method1
Before advice called method2
Re: Проблемы со Spring AOP
От: wildie  
Дата: 08.08.06 14:09
Оценка:
Здравствуйте, Trean.

Просто указатель this указывает не на прокси, а на реальльный объект,
вот метод и не перехватывается.
Re[2]: Проблемы со Spring AOP
От: Trean Беларусь http://axamit.com/
Дата: 08.08.06 14:21
Оценка:
Здравствуйте, wildie, Вы писали:

W>Здравствуйте, Trean.


W>Просто указатель this указывает не на прокси, а на реальльный объект,

W>вот метод и не перехватывается.

Совсем запутался С cglib разобрался за час, со Spring вожусь уже второй день. Кто мне объяснит, что такое target, а то комментарии
"Set the given object as target" ничего не проясняют. Мне нужно прокси для класса AImpl, а не интерфейса с делегацией вызовов другому объекту AImpl.
Re[3]: Проблемы со Spring AOP
От: wildie  
Дата: 09.08.06 06:37
Оценка:
Здравствуйте, Trean, Вы писали:

T>Здравствуйте, wildie, Вы писали:


W>>Здравствуйте, Trean.


W>>Просто указатель this указывает не на прокси, а на реальльный объект,

W>>вот метод и не перехватывается.

T>Совсем запутался С cglib разобрался за час, со Spring вожусь уже второй день. Кто мне объяснит, что такое target, а то комментарии

T>"Set the given object as target" ничего не проясняют. Мне нужно прокси для класса AImpl, а не интерфейса с делегацией вызовов другому объекту AImpl.

Тогда наверное никак. По-моему в Spring такого сделать нельзя. Можно использовать AspectJ, но это совсем уже другая история.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.