AOP가 필요한 이유?
Aspect는 여러 유형과 객체 간에 발생하는 문제 (ex - 트랜잭션)의 모듈화를 가능하게 함!
애스팩트(Aspect)
어드바이스 + 포인트컷을 모듈화하여 애플리케이션에 포함되는 횡단 기능
조인 포인트(join point)
클래스 초기화, 객체 인스턴스화, 메소드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미
어드바이스(Advice)
조인포인트에서 수행되는 코드
포인트컷(Pointcut)
조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
위빙(Weaving)
포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것
AOP 프록시(proxy)
AOP 기능을 구현하기 위해 만든 프록시 객체
타겟 (Target)
핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 됨
어드바이저(Advisor)
하나의 어드바이스와 하나의 포인트 컷으로 구성
어드바이스(Advice)?
Aspect를 언제 핵심 코드에 적용할지를 정의
Advice 순서
어드바이스는 기본적으로 순서를 보장하지 않음
순서를 지정하고 싶으면
@Aspect
적용 단위로org.springframework.core.annotation.@Order 애너테이션
을 적용
Before
조인 포인트 실행 이전에 실행
After returning
조인 포인트가 정상 완료 후 실행
After throwing
메서드가 예외를 던지는 경우에 실행
After (finally)
조인 포인트의 동작(정상 또는 예외)과는 상관없이 실행
Around
메서드 실행 전 & 후, 예외 발생 시점에 공통 기능을 실행