Как это работает
Главный код для CalculateSpring переименован в CalculateSpringAOP, и показан здесь:
Обратите внимание, что этот главный код вообще не модифицируется. Аспект примененный через SpringAOP не требует внесения перемен в тело целевого кода.
Связывание в AOP прокси
Как и другие Spring техники, АОП связывает через конфигурационный файл (описание контекста). Если посмотреть в beans.xml файл, можно увидеть, как именно применяется аспект.
Spring контейнер обрабатывает элемент <aop:aspectj-autoproxy> и автоматически создает динамический прокси, необходимый для АОП когда он связывает бины вместе. Прокси автоматически добавляются Spring-ом к CaculateSpringAOP классу.
В этом случае, Spring 2 использует AspectJ pointcut язык (будет описываться в следующих секциях).
Соответствие JointPoints через AspectJ Pointcut выражения
Java аннотации используются для того, чтобы определить pointcut, соответственно указывая, где будет применен аспект.
@Aspect аннотация выделяет этот класс как аспект. @Before аннотация определяет текущую pointcut. Это выражение говорит, Примени этот аспект перед тем, как ты вызовешь любой метод типа com.wrox.begspring.Operation.
Com.wrox.begspring.Operation - это интерфейс и результат в аспекте будет всегда выводиться перед запуском метода c любой реализацией этого интерфейса.
Аргумент у метода logMethodExecution() - это join point. В нашем случае мы вызываем toShortString(), а вообще у join point существует немного больше методов. Здесь описывать мы их не станем.
Aspect - это java класс и мы можем определять их сколько угодно. Теперь мы можем соединять аспекты логирования, которые разделены между собой, можем гибко применять их к большому количеству кода через манипулирование pointcut выражениями. Это суть того, как АОП может оказаться полезным в повседневной работе программиста.