В сообщении под названием "Основы AOP" , я попросил объяснение короля на английском языке о том, что такое АОП, и что он делает. Я получил очень полезные ответы и ссылки на статьи, которые помогли мне заполнить всю теорию.
Но теперь AOP привлекло мое внимание, и все эти статьи и выдержки из главы являются фантастическими, но в каждом отдельном случае они состоят из высокой теории, неопределенных моделей UML и порядка абстракции, которые являются способом слишком высоко для меня.
Вот мое понимание теории АОП, просто чтобы уточнить, поэтому, если вы видите что-то, что выглядит неправильно, дайте мне знать!:
-
Такие сквозные проблемы, как ведение журнала, аутентификация, синхронизация, проверка, обработка исключений и т.д., становятся высокосвязными в системах, отличных от AOP, поскольку они используются повсеместно почти каждым компонентом/модулем в базе кода.
-
AOP определяет аспекты (классы/методы), которые абстрагируют эти сквозные проблемы с использованием точек соединения, рекомендаций, pointcuts.
а. Совет. Фактический код (метод аспекта, возможно?), Реализующий сквозную задачу (например, выполнение фактического ведения журнала, проверка подлинности, аутентификация и т.д.).
б. Присоединительная точка - событие, которое запускается в коде, отличном от AOP, который вызывает конкретный совет по аспектам, который должен выполняться ( "сотканный" в не-AOP-код)
с. 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 на целевом или удачном пути и почему? Как один правильно использовать аннотации для реализации аспектов, советов, точек соединения, точек и этого так называемого ткача ткачества?