В сообщении, озаглавленном «Основы АОП» , я попросил объяснение King's English что такое АОП и для чего он нужен. Я получил несколько очень полезных ответов и ссылок на статьи, которые помогли мне разобраться в теории.
Но теперь все мое внимание привлекла АОП, и все эти статьи и отрывки из глав просто фантастические, но в каждом отдельном случае они состоят из возвышенной теории, расплывчатых моделей UML и порядка абстракции, которые на мой взгляд слишком высоки.
Вот мое понимание теории АОП, просто чтобы прояснить , поэтому, если вы видите что-то, что выглядит не так, дайте мне знать!:
Общие проблемы, такие как ведение журнала, аутентификация, синхронизация, проверка, обработка исключений и т. д., становятся сильно взаимосвязанными в системах без AOP по мере их использования универсально почти для каждого компонента / модуля в кодовой базе.
АОП определяет аспектов (классов / методов), которые устраняют эти сквозные проблемы с использованием точек соединения , ] advice и pointcuts .
a. Совет - Фактический код (метод аспекта, возможно?), Реализующий сквозную проблему (т.е. е. ведение фактического протоколирования, проверки, аутентификации и т. д.)
b. Точка присоединения - событие, которое запускается в коде, отличном от AOP, которое вызывает выполнение рекомендации конкретного аспекта («вплетено» в код без AOP)
c. Pointcut - По сути, отображение точек соединения (инициирующих событий) для выполнения рекомендаций
Все аспекты разделены на модули (LoggingAspect, AuthenticationAspect, ValidationAspect и т. Д.) В компоненты и зарегистрированы с помощью AspectWeaver . Когда код, не относящийся к AOP / POJO, сталкивается с точкой соединения, AspectWeaver «сплетает» (интегрирует) сопоставленный совет вокруг кода, отличного от AOP:
public class LoggingAspect { // ... public void log(String msg) { ... } } public class ExceptionHandlingAspect { // .. public void handle(Exception exc) { ... } } public class NonAOPCode { // ... @LoggingAspect @ExceptionHandlingAspect public void foo() { // do some stuff... } } // Now in the driver public static int main void(String[] args) { NonAOPCode nonAOP = new NonAOPCode(); nonAOP.foo(); } // The AspectWeaver *magically* might weave in method calls so main now becomes: { NonAOPCode nonAOP = new NonAOPCode(); log(someMsg); nonAOP.foo(); handle(someExc); }
Вопрос в 64 000 долларов: Насколько я понимаю, нацелен AOP на основе Java? или далеко, и почему? Как можно правильно использовать аннотации для реализации аспектов, рекомендаций, точек соединения, pointcut и этого так называемого ткача аспектов?