Spring AOP란 무엇일까?
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다.
- Spring의 AOP 애너테이션

- Spring의 AOP 애너테이션
- @Aspect
- Spring 빈(Bean) 클래스에만 적용 가능합니다.
- 어드바이스 종류
- @Around: '핵심기능' 수행 전과 후 (@Before + @After)
- @Before: '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행)
- @After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작)
- @AfterReturning: '핵심기능' 호출 성공 시 (함수의 Return 값 사용 가능)
- @AfterThrowing: '핵심기능' 호출 실패 시. 즉, 예외 (Exception) 가 발생한 경우만 동작 (ex. 예외가 발생했을 때 개발자에게 email 이나 SMS 보냄)
- 포인트컷
- 포인트컷 Expression Language
- 포인트컷 Expression 형태
- execution(modifiers-pattern? return-type-pattern declaring-type-pattern? method-name-pattern(param-pattern) throws-pattern?)
- ? 는 생략 가능
- 포인트컷 Expression 예제
- @Around("execution(public * com.sparta.myselectshop.controller..*(..))") public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { ... }
- execution(modifiers-pattern? return-type-pattern declaring-type-pattern? **method-name-pattern(param-pattern)** throws-pattern?)
- modifiers-pattern
- public, private, *
- return-type-pattern
- void, String, List<String>, *****
- declaring-type-pattern
- 클래스명 (패키지명 필요)
- com.sparta.myselectshop.controller.* - controller 패키지의 모든 클래스에 적용
- com.sparta.myselectshop.controller.. - controller 패키지 및 하위 패키지의 모든 클래스에 적용
- declaring-type-pattern
- 클래스명 (패키지명 필요)
- com.sparta.myselectshop.controller.* - controller 패키지의 모든 클래스에 적용
- com.sparta.myselectshop.controller.. - controller 패키지 및 하위 패키지의 모든 클래스에 적용
- method-name-pattern(param-pattern)
- 함수명
- addFolders : addFolders() 함수에만 적용
- add* : add 로 시작하는 모든 함수에 적용
- 파라미터 패턴 (param-pattern)
- (com.sparta.myselectshop.dto.FolderRequestDto) - FolderRequestDto 인수 (arguments) 만 적용
- () - 인수 없음
- (*) - 인수 1개 (타입 상관없음)
- (..) - 인수 0~N개 (타입 상관없음)
- 함수명
- @Pointcut
- 포인트컷 재사용 가능
- 포인트컷 결합 (combine) 가능
- 포인트컷 Expression Language
Spring AOP 동작 이해
1. 개념적 이해


2. 스프링 실제 동작

3.시퀀스 다이어그램 (Sequence Diagram)

'Spring' 카테고리의 다른 글
Spring ) DI, IoC 정리 (0) | 2023.07.14 |
---|---|
Spring ) AOP (Aspect Oriented Programming)란? (0) | 2023.07.13 |
Spring ) 스프링 빈(Bean)이란 무엇인가? (0) | 2023.07.12 |
Spring ) Intro to the Jackson ObjectMapper / ObjectMapper 정리 (0) | 2023.07.12 |
Spring ) @JsonInclude(JsonInclude.Include.NON_NULL) (0) | 2023.07.05 |