공통 관심사항과 핵심 관심 사항을 분리하는 프로그래밍
AOP를 사용하지 않으면, MemberService 모든 메소드에 회원 조회 시간 측정 코드를 추가해야 한다. 하지만, 이를 공통 관심사항으로 분리하면, 원하는 메소드에서만 호출에서 사용할 수 있다.
AOP 적용 전 의존 관계
memberController -> memberService
AOP 적용 후 의존 관계
memberController -> 프록시(memberService) -> 실제 memberService
- 프록시 memberService 는 가짜 스프링 빈으로 joinPoint.proceed()를 통해서 실제 memberService를 호출한다.
시간 측정 AOP 등록
//Spring Config에 등록하는 것이 선호되고 있다.
@Component
@Aspect
public class TimeTraceAop{
@Around("execution(* hello.hellospring..*(..))")
//공통 관심사를 어는 곳에 적용하는지에 대한 path 설정
long start = System.currentTimeMillis();
System.out.prinln("START: " + joinPoint.toString());
try{
return joinPoint.proceed();
}finally{
long finish = System.currentTimeMillis();
long timeMs = finish-start;
System.out.println("END: "+ joinPoint.toString()+" " + timeMs+ "ms");
}
}
}
다음 글은 인프런 김영한 강사님의 스프링 강의 복습용입니다 :)