Рубрики
Без рубрики

Введение в весенний АОП

Откройте для себя основную пружину AOP вместе с ее основной терминологией.

Автор оригинала: baeldung.

1. введение

В этом уроке мы познакомимся с AOP (Аспектно-ориентированное программирование) с Spring и начнем понимать, как мы можем начать использовать этот мощный инструмент в практических сценариях.

Также можно использовать аннотации Aspectj при разработке с использованием Spring AOP, но в этой статье мы сосредоточимся на базовой конфигурации Spring AOP на основе XML.

2. Обзор

AOP-это парадигма программирования, которая направлена на повышение модульности за счет разделения сквозных проблем. Он делает это, добавляя дополнительное поведение к существующему коду без изменения самого кода.

Вместо этого мы можем объявить этот новый код и эти новые модели поведения отдельно.

Spring AOP framework помогает нам реализовать эти сквозные проблемы.

3. Зависимости Maven

Давайте начнем с добавления зависимости библиотеки AOP Spring в pom.xml :


    org.springframework.boot
    spring-boot-starter-parent
    2.4.0

 

    
        org.springframework.boot
        spring-boot-starter-aop
    

Последнюю версию зависимости можно проверить здесь .

4. Концепции и терминология АОП

Давайте вкратце рассмотрим понятия и терминологию, характерные для АОП:

4.1. Бизнес-объект

Бизнес-объект-это обычный класс, который имеет обычную бизнес-логику. Давайте рассмотрим простой пример бизнес-объекта, где мы просто добавляем два числа:

public class SampleAdder {
    public int add(int a, int b) {
        return a + b;
    }
}

Обратите внимание, что этот класс является обычным классом с бизнес-логикой и без каких-либо аннотаций, связанных с Spring.

4.2. Аспект

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

Давайте посмотрим, как мы определяем простой аспект:

public class AdderAfterReturnAspect {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    public void afterReturn(Object returnValue) throws Throwable {
        logger.info("value return was {}",  returnValue);
    }
}

В приведенном выше примере мы только что определили простой класс Java, который имеет метод с именем после возврата , который принимает один аргумент типа Object и просто регистрирует это значение. Обратите внимание, что даже наш Сумматор после возврата является стандартным классом, свободным от каких-либо аннотаций Spring.

В следующих разделах мы рассмотрим, как мы можем связать этот аспект с нашим бизнес-объектом.

4.3. Точка соединения

A Точка соединения является точкой во время выполнения программы, такой как выполнение метода или обработка исключения.

В Spring AOP точка соединения /всегда представляет выполнение метода.

4.4. Точечный разрез

Точечный разрез-это предикат, который помогает соответствовать Совету , применяемому Аспектом в конкретной точке соединения .

Совет часто связан с выражением Pointcut и выполняется в любой точке соединения , соответствующей Pointcut.

4.5. Советы

Совет-это действие, предпринятое аспектом в определенной точке соединения . Различные типы советов включают “вокруг”, “до” и “после” советы.

Весной Совет моделируется как перехватчик, поддерживая цепочку перехватчиков вокруг точки соединения .

4.6. Проводка Бизнес-объекта и Аспекта

Давайте посмотрим, как мы можем связать Бизнес-объект с Аспектом с помощью совета после возврата.

Ниже приведен фрагмент конфигурации, который мы поместили бы в стандартную конфигурацию Spring в теге “” :




    
       
       
    

Как можно видеть, мы определили простой компонент под названием simple Adder , который представляет экземпляр бизнес-объекта. Кроме того, мы создаем экземпляр Аспекта под названием Сумматор После возврата аспекта .

XML, конечно, не единственный наш вариант здесь; как упоминалось ранее, аннотации AspectJ также полностью поддерживаются.

4.7. Конфигурация с первого взгляда

Тег aop:config используется для определения конфигурации, связанной с AOP. В теге config мы определяем класс, представляющий аспект. Мы дали ему ссылку на “сделать после возврата аспекта” аспект боба, который мы создали.

Затем мы определяем точечный разрез с помощью тега pointcut . Pointcut, используемый в приведенном выше примере, – это execution(* org.baeldung.лесоруб.Пример сумматора+.* (..)) , что означает применение рекомендации к любому методу в классе SampleAdder , который принимает любое количество аргументов и возвращает любой тип значения.

Затем мы определяем, какой совет мы хотим применить. В приведенном выше примере мы собираемся применить совет после возврата, который определен в нашем аспекте AdderAfterReturnAspect , выполнив метод с именем afterReturn , определенный с помощью метода атрибута.

Этот совет в аспекте принимает один параметр типа Object. Параметр дает нам возможность выполнить действие до и/или после вызова целевого метода. В этом случае мы просто регистрируем возвращаемое значение метода.

Spring AOP поддерживает несколько советов с использованием конфигурации на основе аннотаций-этот и другие примеры можно найти здесь и здесь .

5. Заключение

В этом уроке мы проиллюстрировали концепции, используемые в AOP, и пример использования модуля AOP Spring. Если вы заинтересованы в том, чтобы узнать больше об АОП, вот некоторые ресурсы:

  • Введение в AspectJ
  • Реализация пользовательской аннотации Spring AOP
  • Введение в выражения точечной резки весной
  • Сравнение Spring AOP и AspectJ
  • Введение в типы советов весной

Реализацию этих примеров можно найти в проекте GitHub – это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.