J

Java Aspect

Категория проекта: Ожидает модерации

Java AspectJ Examples

Описание

Проект с примерами подключения библиотеки AspectJ.

Проект разделен на модули, каждый из которых описывает различные способы подключения аспектов:

  • связывание с использованием плагина:
    • weaving-compile-time
    • weaving-post-compile
  • связывание во время выполнения:
    • weaving-load-time

Дополнительно

Для плагина не продемонстрировано в проекте:

  • указание каталогов и шаблонов классов для просмотра через includes/excludes
  • плетение уже скомпилированных классов проекта в секции weaveDirectories
  • подключение скомпилированных зависимостей с аспектами в секции aspectLibraries

Запуск

Описан в README.md каждого модуля.

Описание терминов

  • Weaving — связывание объектов с соответствующими аспектами (возможно на этапе компиляции, загрузки или выполнения программы);
  • JoinPoint — точка наблюдения в выполняемой программе, где добавляется функциональность отдельной инструкции (Advice);
  • @Aspect — модуль или класс, в котором собраны описания точек среза (Pointcut) и наборы инструкций для них (Advice);
  • @Pointcut (1/2) — точка среза, включающая набор точек наблюдения (JoinPoint);
    • execution(static * com.xyz..*.*(..)) — выполнение кода любого статического метода в пакете com.xyz;
    • execution(* com.xyz..*.*(..)) — выполнение кода любого метода или конструктора в пакете com.xyz;
    • call(void MyInterface.*(..)) — вызов любого метода, возвращающего void, интерфейса MyInterface;
    • initialization(MyClass || MyOtherClass) — инициализация класса MyClass или MyOtherClass;
    • staticinitialization(MyClass+ && !MyClass) — статическая инициализация класса, имя которого начинается на MyClass, но не сам MyClass;
    • preinitialization(MyClass) — каждая предварительная инициализация объекта, когда первый конструктор, вызванный по типу, соответствует сигнатуре, включая запись первого вызванного конструктора до вызова суперконструктора;
    • handler(ArrayOutOfBoundsException) — выполнение обработчика исключения ArrayOutOfBoundsException;
    • get/set(static int MyClass.x) — чтение / запись свойства x класса MyClass;
    • this/target(MyClass) — выполнение точки соединения, соответствующей объекту типа MyClass;
    • args(Integer) — выполнение точки соединения, в которой доступен аргумент типа Integer;
    • if(thisJoinPoint.getKind().equals("call")) — совпадает со всеми точками соединения, в которых заданное выражение истинно;
    • within/withincode(MyClass) — совпадает со всеми точками соединения, встречающимися в коде заданного класса;
    • cflow/cflowbelow(call(void MyClass.test())) — совпадает со всеми точками соединения, встречающимися в потоке выполнения заданного среза;
    • adviceexecution() — каждое выполнение любого набора инструкций (Advice);
    • @annotation(MyAnnotation) — выполнение точки соединения, цель которой помечена аннотацией @MyAnnotation;
  • Advice — инструкции выполняемые на точках среза (Pointcut); на одной точке среза (Pointcut) может быть несколько инструкций;
    • @Before — запуск совета до выполнения точки соединения;
    • @AfterReturning — запуск совета после нормального выполнения точки соединения;
    • @AfterThrowing — запуск совета после выброса исключения в процессе выполнения точки соединения;
    • @After — запуск совета после любого варианта выполнения точки соединения;
    • @Around — запуск совета вместо выполнения точки соединения (выполнение точки соединения может быть вызвано внутри совета);

Ссылки

Пример подключения

Аспектно-ориентированное программирование, Spring AOP

Знакомство с АОП

AspectJ в автоматическом тестировании — несколько практических примеров

The AspectJ Programming Guide

The AspectJ Development Environment Guide

Mojo's AspectJ Maven Plugin