Pointcut Expressions
Pointcut Expressions — это важный элемент AOP, позволяющий указать, где именно в коде должен срабатывать аспект. С их помощью можно точно определить, какие методы или классы будут подвержены сквозной функциональности.
1. Что такое Pointcut Expressions?
Pointcut — это выражение, определяющее набор точек соединения (Joinpoints), к которым будет применяться аспект. В Spring Pointcut Expressions основываются на синтаксисе AspectJ, что позволяет гибко описывать нужные методы или классы.
2. Основные типы Pointcut Expressions
execution:
Самый часто используемый тип, который указывает выполнение метода.
Все методы в классе UserService:
Методы, возвращающие void:
Методы с определённым набором параметров:
within:
Указывает на методы, принадлежащие определённому классу или пакету.
@annotation:
Указывает на методы, которые помечены определённой аннотацией.
args:
Указывает на методы, принимающие параметры определённого типа.
this / target:
this: срабатывает на прокси-объекты.
target: срабатывает на исходные объекты.
3. Комбинирование Pointcut Expressions
Pointcut выражения можно комбинировать с логическими операторами:
&& — И.
|| — ИЛИ.
! — НЕ.
Пример:
4. Использование Pointcut в аспектах
Определение Pointcut:
Применение к методам с аннотацией:
#Java #Training #Spring #AOP #Pointcut_Expressions
Pointcut Expressions — это важный элемент AOP, позволяющий указать, где именно в коде должен срабатывать аспект. С их помощью можно точно определить, какие методы или классы будут подвержены сквозной функциональности.
1. Что такое Pointcut Expressions?
Pointcut — это выражение, определяющее набор точек соединения (Joinpoints), к которым будет применяться аспект. В Spring Pointcut Expressions основываются на синтаксисе AspectJ, что позволяет гибко описывать нужные методы или классы.
2. Основные типы Pointcut Expressions
execution:
Самый часто используемый тип, который указывает выполнение метода.
execution(modifiers-pattern? return-type-pattern declaring-type-pattern? method-name-pattern(param-pattern) throws-pattern?)
Все методы в классе UserService:
execution(* com.example.service.UserService.*(..))
Методы, возвращающие void:
execution(void com.example.service.*.*(..))
Методы с определённым набором параметров:
execution(* com.example.service.UserService.findBy*(String, int))
within:
Указывает на методы, принадлежащие определённому классу или пакету.
within(com.example.service.UserService)
@annotation:
Указывает на методы, которые помечены определённой аннотацией.
@annotation(org.springframework.transaction.annotation.Transactional)
args:
Указывает на методы, принимающие параметры определённого типа.
args(java.lang.String, int)
this / target:
this: срабатывает на прокси-объекты.
target: срабатывает на исходные объекты.
this(com.example.service.UserService)
target(com.example.service.UserService)
3. Комбинирование Pointcut Expressions
Pointcut выражения можно комбинировать с логическими операторами:
&& — И.
|| — ИЛИ.
! — НЕ.
Пример:
@Pointcut("execution(* com.example.service.*.*(..)) && @annotation(org.springframework.transaction.annotation.Transactional)")
public void transactionalMethods() {}
4. Использование Pointcut в аспектах
Определение Pointcut:
@Aspect
@Component
public class LoggingAspect {
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceLayerMethods() {}
@Before("serviceLayerMethods()")
public void logBefore(JoinPoint joinPoint) {
System.out.println("Before method: " + joinPoint.getSignature().getName());
}
}
Применение к методам с аннотацией:
@Before("@annotation(com.example.annotations.Loggable)")
public void logForAnnotatedMethods(JoinPoint joinPoint) {
System.out.println("Logging for annotated method: " + joinPoint.getSignature().getName());
}
#Java #Training #Spring #AOP #Pointcut_Expressions