В сообщении под названием "Основы 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 на целевом или удачном пути и почему? Как один правильно использовать аннотации для реализации аспектов, советов, точек соединения, точек и этого так называемого ткача ткачества?
