AOP: Aspect Oriented Programming(관점 지향 프로그래밍)
회원가입, 회원조회 기능에 시간측정 로직 추가
MemberService
public Long join(Member member) {
// 같은 이름이 있는 중복 회원X
long start = System.currentTimeMillis(); //시작시간 측정
try{
validateDuplicateMember(member);
memberRepository.save(member);
return member.getId();
}finally { //로직이 끝날 때 시간 측정-> finally
long finish = System.currentTimeMillis(); //끝난 시간
long timeMs = finish - start;
//걸린 시간 = 끝난 시간 - 시작 시간
System.out.println("join = " + timeMs + "ms");
}
}
->실행
localhost8080 -> 회원 목록 실행
- 공통 관심 사항(cross-cutting concern)
- 핵심 관심 사항(core concern)
TimeTraceAop에 시간 측정 로직을 한 곳에 모아두고 원하는 곳에 적용시킴
- aop패키지 생성 후 TimeTraceAop클래스 생성
Aop는 사용하려면 @Aspect 추가
TimeTraceAop
- 컴포넌트 스캔으로 스프링 빈으로 등록
*@Component 컴포넌트 스캔도 있지만 정형화된 코드가 아니기 때문에
스프링 빈에 등록하는 것을 선호
- @Around("execution( 패키지,클래스명..(..))")
공통범위에 적용시키기 위해 hellospring패키지 전체에 전부 적용ex)
@Around("execution( hello.hellospring..(..))")
@Around("execution( hello.hellospring.service..(..))")
- localhost8080 실행
AOP적용하고 어디에 적용할지 지정을 하게 되면 스프링 빈에 등록할 때 가짜 멤버서비스를 먼저 호출시킴. 그 후 joinPoint.proceed()로 실제 멤버 서비스를 호출 --> Proxy
멤버 컨트롤러의 멤버 서비스가 실제 porxy가 주입되는지 확인
System.out.println("memberService" + memberService.getClass());