Spring은 AOP를 지원하기 위해 특별한 기능과 구조를 제공함
런타임에 대상 객체를 감싸는 동적 프록시를 만듬
메서드 실행 시점에 부가기능을 끼워넣는 방식을 사용
기술적 제약 과 의도된 설계 선택으로, 복잡성을 줄이고 실용성을 높이기 위한 결정
부가 기능(어드바이스)과 그것이 적용될 위치(포인트 컷)를 합친 모듈 단위
- 부가기능 코드
- 메서드 실행 전(
@Before), 후(@After), 예외 발생 시(@AfterThrowing), 메서드 실행 전후 모두(@Around) 등 다양한 시점에서 실행 가능
Advice가 적용될 대상 메서드를 지정하는 조건식
메서드명, 클래스명, 패키지명, 애노테이션 등 다양한 기준으로 세밀하게 적용 대상을 필터링 가능
어노테이션을 사용해 간편하게 AOP 설정과 구현이 가능하도록 지원
AOP 코드 내에서 실행 중인 메서드의 정보, 파라미터, 대상 객체 등을 쉽게 가져오고 제어 가능하게 함
@Around 어드바이스에서는 proceed() 호출로 핵심 로직 실행을 명시적으로 제어 가능
Advice가 실행되는 시점
관련 코드 예제가 있으면 좋을 것 같습니다.