@Transactional
public class MemberService {
public Long join(Member member) {
long start = System.currentTimeMillis();
try {
validateDuplicateMember(member);
memberRepository.save(member);
return member.getId();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("join = " + timeMs + "ms");
}
}
public void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName()).ifPresent(m -> {
throw new IllegalArgumentException("이미 존재하는 회원입니다.");
});
}
/**
* 전체 회원 조회
*/
public List<Member> findMembers() {
long start = System.currentTimeMillis();
try {
return memberRepository.findAll();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("findMembers = " + timeMs + "ms");
}
}
}
★ 문제
@Aspect
@Component
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))") // AOP 를 적용할 곳을 설정 (모든 패키지에 적용)
// @Around("execution(* hello.hellospring.service..*(..))") // AOP 를 적용할 곳을 설정 (서비스에만 적용)
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START : " + joinPoint.toLongString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END : " + joinPoint.toLongString() + " " + timeMs + "ms");
}
}
}
★ 해결
AOP 적용 전 의존관계
AOP 적용 전 전체 관계
AOP 적용 후 의존관계
AOP 적용 후 전체 관계