Аспектно-ориентированное программирование Java с Аннотации

В сообщении, озаглавленном «Основы АОП» , я попросил объяснение King's English что такое АОП и для чего он нужен. Я получил несколько очень полезных ответов и ссылок на статьи, которые помогли мне разобраться в теории.

Но теперь все мое внимание привлекла АОП, и все эти статьи и отрывки из глав просто фантастические, но в каждом отдельном случае они состоят из возвышенной теории, расплывчатых моделей UML и порядка абстракции, которые на мой взгляд слишком высоки.

Вот мое понимание теории АОП, просто чтобы прояснить , поэтому, если вы видите что-то, что выглядит не так, дайте мне знать!:

  1. Общие проблемы, такие как ведение журнала, аутентификация, синхронизация, проверка, обработка исключений и т. д., становятся сильно взаимосвязанными в системах без AOP по мере их использования универсально почти для каждого компонента / модуля в кодовой базе.

  2. АОП определяет аспектов (классов / методов), которые устраняют эти сквозные проблемы с использованием точек соединения , ] advice и pointcuts .

    a. Совет - Фактический код (метод аспекта, возможно?), Реализующий сквозную проблему (т.е. е. ведение фактического протоколирования, проверки, аутентификации и т. д.)

    b. Точка присоединения - событие, которое запускается в коде, отличном от AOP, которое вызывает выполнение рекомендации конкретного аспекта («вплетено» в код без AOP)

    c. Pointcut - По сути, отображение точек соединения (инициирующих событий) для выполнения рекомендаций

  3. Все аспекты разделены на модули (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 и этого так называемого ткача аспектов?

62
задан Community 23 May 2017 в 12:10
поделиться