인프런 커뮤니티 질문&답변

mippy98님의 프로필 이미지
mippy98

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

AOP 적용

AOP @Bean 사용시 시간 출력

작성

·

261

0

안녕하세요!! 좋은 강의 제공해 주셔서 정말 감사합니다.
이제 막 스프링 공부를 시작하는 와중에, 어떻게 시작해야 할지 모르는 상황에서 정말 많은 도움 됐습니다!!

궁금한 점은 AOP를 직접 @Bean으로 등록해 줘서 실행했을 때, 왜 시간 출력물이 나오지 않는 것인지 궁금합니다!

SpringConfig에서
return new TimeTraceAop(); 으로 새로운 TimeTraceAop()객체를 리턴하는데,
TimeTraceAop()의 execut() 메소드가 호출이 안되는 건가요? 

시간을 출력하려면 어떻게 해야 할까요?
 
아래는 @Bean으로 직접 등록하고 실행한 결과입니다!

답변 1

0

안녕하세요. mippy98님, 공식 서포터즈 David입니다.

강의내용과 Around쪽 코드가 조금 달라보이는데, 모든 코드를 강의내용과 동일하게 작성하신 뒤 다시 실행해보시겠어요?

감사합니다.

mippy98님의 프로필 이미지
mippy98
질문자

@Bean으로 직접 등록해서 하는 방식으로 바꾼건데 저렇게 하는거 아닌가요..? ㅜㅜ 

패키지명은 강의에 나오는거랑 다르게 memberproject로 했습니다

코드 첨부 해보겠습니다..!!

 

TimeTraceAop.java


@Aspect
public class TimeTraceAop {

@Around("execution(* com.example.meberproject..*(..)) && !target(com.example.memberproject.SpringConfig)")
public Object execut(ProceedingJoinPoint joinPoint) throws Throwable {
// 시간 로직
long start = System.currentTimeMillis();
System.out.println("STRAT: " + joinPoint.toString());
return joinPoint.proceed();

} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
}
}
}

 

SpringConfig.java


@Configuration
public class SpringConfig {

private MemberRepository memberRepository;

@Autowired // 생략 가능
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}

@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}


@Bean // 스프링 빈에 직접 AOP 등록
public TimeTraceAop timeTraceAop() {
return new TimeTraceAop();
}

}

그렇다면 AOP가 적용된 메서드가 하나라도 실행이 된 상태인가요?

페이지를 요청해서 메서드가 호출되게 하신 후 AOP가 적용되었는지 확인해주세요.

mippy98님의 프로필 이미지
mippy98
질문자

위에 첨부한 사진이 서버 실행해서 spring3으로 가입하고 회원 목록 조회 했을때 나오는 콘솔 화면 입니다. 그래서 보면 member = spring3 이 출력 되어있어요! 이거 출력하는 코드는 MemberController.java에  create 메소드에 있습니다. 

회원 목록 페이지에도 spring3이 있습니다. 그럼 메소드는 실행이 된건데, 그냥 AOP가 적용이 안된걸까요...? 

 

spring55로 다시 실행한 결과 첨부하겠습니다 ㅜㅜ

질문자분께서 작성하신 코드로 테스트해보았는데, 잘 동작했습니다.

더 자세한 확인을 위해 아래 가이드를 따라 프로젝트를 전달해주실 수 있을까요?

---

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 권한 문제 꼭 확인해주세요


추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

mippy98님의 프로필 이미지
mippy98

작성한 질문수

질문하기