@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}
2. AOP 적용 어노테이션
어노테이션
설명
@Aspect
해당 클래스를 Aspect로 선언
@Pointcut
Pointcut 표현식 정의
@Before
Before Advice 적용
@After
After Advice 적용
@AfterReturning
After Returning Advice 적용
@AfterThrowing
After Throwing Advice 적용
@Around
Around Advice 적용
1) @Aspect
해당 클래스를 Aspect로 선언
@Component와 함께 사용해야 Bean으로 등록됨
@Aspect
@Component
public class MemberLog {
}
2) @Pointcut
Pointcut 표현식을 메서드로 정의해 재사용할 수 있음
Advice 어노테이션에 표현식을 직접 작성하면 생략 가능
속성
설명
value
Pointcut 표현식 (필수)
@Aspect
@Component
public class MemberLog {
@Pointcut("execution(* com.example.MemberService.*(..))")
public void memberPointcut() {} // 메서드 이름이 Pointcut 식별자가 됨
}
3) @Before / @After
속성
설명
value
Pointcut 표현식 또는 @Pointcut 메서드명
@Before("memberPointcut()")
public void logBefore() {
System.out.println("메서드 실행 전 로그");
}
@After("memberPointcut()")
public void logAfter() {
System.out.println("메서드 실행 후 로그");
}
(1) JoinPoint 파라미터
Advice 어노테이션 메서드에서 첫 번째 파라미터로 JoinPoint를 받을 수 있음
@Around는 반드시 ProceedingJoinPoint를 첫 번째 파라미터로 받아야 함 (필수)
ProceedingJoinPoint는 JoinPoint를 상속한 타입으로 proceed()로 Target 메서드를 직접 실행할 수 있어서 @Around에서만 사용함