Ключевым моментом, который необходимо понять, является то, что при использовании Aspect
программирования вызовы методов для этой ссылки на объект будут вызовами прокси-сервера, и, таким образом, прокси сможет делегировать всем перехватчикам (совет) которые имеют отношение к этому конкретному вызову метода.
Однако, как только вызов, наконец, достигнет целевого объекта, любые вызовы методов, которые он может сделать для себя, , такие как Digest (Data), будут вызываться с ссылкой this, а не с прокси .
Это имеет важные последствия. Это означает, что самовывоз не приведет к тому, что совет, связанный с вызовом метода, получит шанс на выполнение. Но есть способ сделать это:
public byte[] sign(byte[] data){
...
b = (Digester)AopContext.currentProxy()).Digest(Data);
...
return signature;
}
Это полностью связывает ваш код с Spring AOP
и позволяет самому классу осознать тот факт, что он используется в контексте AOP, который бросает вызов AOP.