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

Весенний АОП

Аспектно-ориентированное программирование (AOP) позволяет модулировать необходимые общие функциональные возможности… Помеченный aop, spring, java.

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

Spring AOP использует динамические прокси (расширенные классы, которые заменяют оригиналы) для объединения аспектов (объединения аспектов с кодом). Аспект – это класс java, который содержит pointcut (выражения, которые выбирают одну или несколько точек соединения) и advice (код, который должен выполняться в каждой выбранной точке соединения).

Например, давайте реализуем аспект для ведения журнала. Во-первых, нам нужно включить использование аннотации @Aspect, добавив аннотацию @EnableAspectJAutoProxy в класс @Configuration (см. Spring Configuration) (с соответствующим @ComponentScan в пакеты с аспектами). Теперь мы можем создать @Aspect:

@Aspect
@Component
public class LoggingAspect {

    private Logger logger = Logger.getLogger(getClass());

    @Before("execution(public * package_name.*(..))")
    public void log() {
          logger.info("Logging from aspect");
    }
}

Мы можем получить точку соединения (или ее подинтерфейс ProceedingJoinPoint) в качестве параметра в методах и получить некоторые свойства (см. Joinpoint interface ). И не только использовать аннотацию @Before поверх методов, но и использовать другие аннотации из пакета org.aspectj.lang.annotation как @Around, @After, @AfterReturning и @AfterThrowing, за которыми следует контекст о перехваченной точке с использованием языка выражений AspectJ pointcut (подстановочная звездочка совпадает один раз, две точки соответствуют нулю или более) для выбора, где применять рекомендации (см. AspectJ Documentation ).

Принять во внимание:

  • Если совет @Before выдает исключение, цель вызываться не будет.
  • Вы можете рекомендовать только непубличные методы.
  • Вы можете применять аспекты только к весенним бобам.

Оригинал: “https://dev.to/eidher/spring-aop-1dpp”