AOP는 애플리케이션의 횡단 관심사(종단 관심사가 아닌 부분)를 모듈화하고 관리하여 주로 다수의 클래스나 모듈에 걸쳐 반복되는 기능을 분리하고 재사용 가능한 모듈로 만드는 데 사용
@Aspect
Aspect 클래스를 정의할 때 사용되며, 횡단 관심사를 구현한 클래스
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class MyAspect {
// Aspect 클래스 정의
}
@Before
메서드 실행 전에 어드바이스를 실행
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class MyAspect {
@Before("execution(* com.example.service.*.*(..))")
public void beforeAdvice() {
// 메서드 실행 전에 실행될 코드
}
}
@After
메서드 실행 후에 어드바이스를 실행
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.After;
@Aspect
public class MyAspect {
@After("execution(* com.example.service.*.*(..))")
public void afterAdvice() {
// 메서드 실행 후에 실행될 코드
}
}
@Around
메서드 실행 전후에 어드바이스를 실행하며, 메서드 실행을 제어할 수 있음
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Around;
@Aspect
public class MyAspect {
@Around("execution(* com.example.service.*.*(..))")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
// 메서드 실행 전에 실행될 코드
Object result = joinPoint.proceed(); // 메서드 실행
// 메서드 실행 후에 실행될 코드
return result;
}
}
@AfterReturning
메서드가 정상적으로 반환될 때에만 실행
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterReturning;
@Aspect
public class MyAspect {
@AfterReturning(pointcut = "execution(* com.example.service.*.*(..))", returning = "result")
public void afterReturningAdvice(Object result) {
// 메서드가 정상적으로 반환될 때 실행될 코드
}
}
@AfterThrowing
메서드에서 예외가 발생할 때에만 실행
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterThrowing;
@Aspect
public class MyAspect {
@AfterThrowing(pointcut = "execution(* com.example.service.*.*(..))", throwing = "ex")
public void afterThrowingAdvice(Exception ex) {
// 메서드에서 예외가 발생할 때 실행될 코드
}
}
'learn > spring' 카테고리의 다른 글
어노테이션(Annotation) - Spring Boot 관련 (0) | 2023.09.26 |
---|---|
어노테이션(Annotation) - Spring MVC 관련 (0) | 2023.09.26 |
어노테이션(Annotation) - 설정(Configuration) 관련 (0) | 2023.09.21 |
어노테이션(Annotation) - 의존성 주입(Dependency Injection) 관련 (0) | 2023.09.21 |
어노테이션(Annotation) - 컴포넌트 스캔(Component Scan) 관련 (0) | 2023.09.21 |