AOP란
AOP(Aspect Oriented Programming)란 관점 지향 프로그래밍으로, 부가 기능(advice)을 동적으로 추가해주는 기술이라고 볼 수 있다.
여러 메서드에 공통 코드를 추가할 때 각각의 메서드가 아니라 아래 사진과 같이 동적으로 추가해줄 수 있다. 그러면 핵심 기능과 부가 기능이 분리되어 변경에 유리한 코드가 된다.
참고로 코드 추가는 메서드의 처음(Before Advice)과 끝 부분(After Advice)에만 가능하다.
* Before Advice + After Advice = Around Advice

AOP 관련 용어
종류 | 설명 |
target | advice가 추가될 객체 |
advice | target에 동적으로 추가될 부가 기능(코드) |
join point | advice가 추가(join)될 대상(메서드) |
pointcut | join point들을 정의한 패턴 |
proxy | target에 advice가 동적으로 추가되어 생성된 객체 |
weaving | target에 advice를 추가해서 proxy를 생성하는 것 |
Advice의 종류
종류 | 애너테이션 | 설명 |
around advice | @Around | 메서드의 시작과 끝 부분에 추가되는 부가 기능 |
before advice | @Before | 메서드의 시작 부분에 추가되는 부가 기능 |
after advice | @After | 메서드의 끝 부분에 추가되는 부가 기능 |
after returning | @AfterReturning | 예외가 발생하지 않았을 때, 실행되는 부가 기능 (ex. try문) |
after throwing | @AfterThrowing | 예외가 발생했을 때, 실행되는 부가 기능 (ex. catch문) |
pointcut expression
execution(반환타입 패키지명.클래스명.메서드명(매개변수 목록))
public class LoggingAdvice {
@Around ("execution(* com.fastcampus.ch3.aop.*.*(..))")
public Object methodCallLog (ProceedingJoinPoint pjp) throws Throwable {
// Before 부분
long start = System.currentTimeMillis();
System.out.println("<<[start] "
+ pjp.getSignature().getName()+Arrays.deepToString(pjp.getArgs()));
// 메서드 호출
Object result = pjp.proceed();
// After 부분
System.out.printin("result = " + result);
System.out.printin("[end]>> "+ (System.currentTimeMillis() - start)+"ms");
return result; // 메서드 호출결과 반환
}
}
참조
https://fastcampus.co.kr/dev_academy_nks
스프링의 정석 : 남궁성과 끝까지 간다 | 패스트캠퍼스
국비지원 조기 마감 신화, 베스트셀러 'JAVA의 정석'의 저자 남궁성의 Spring 강의입니다! 오픈톡방과 카페에서 평생 AS를 제공하며 완강과 취업까지 도와드립니다. 지금 할인가로 확인하세요!
fastcampus.co.kr
https://engkimbs.tistory.com/746
[Spring] 스프링 AOP (Spring AOP) 총정리 : 개념, 프록시 기반 AOP, @AOP
| 스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로
engkimbs.tistory.com
'3. Back-end > 3-2. Spring MVC - 남궁성' 카테고리의 다른 글
SpringMVC - [ MyBatis ] (0) | 2023.03.26 |
---|---|
Spring MVC - [ 서비스 계층의 분리 / Transactional ] (0) | 2023.03.17 |
Spring MVC - [ Transaction, commit, Rollback ] (0) | 2023.03.03 |
Spring MVC - [ Spring DI ] (0) | 2023.02.08 |
Spring MVC - [ 데이터의 검증 ] (0) | 2023.02.02 |