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

어디님의 프로필 이미지

작성한 질문수

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

AOP 적용

proxy 빈 객체를 콘솔로그 중 질문이 있습니다.

21.04.03 23:19 작성

·

159

1

안녕하세요. 이제 막 스프링을 공부하기 시작한 개발자입니다. 먼저 좋은자료 항상 쉽게 공유해주셔서 정말 감사합니다!

콘솔로 proxy Bean 객체를 repository constructor에 콘솔로그로 확인해보는데, AOP 코드를 삭제해도 결과가 그대로라 조금 헷갈립니다.

혹시 proxy 객체는 항상 만들어지게 되는 것일까요?

테스트 코드는 다음과 같습니다.

/* controller.MemberController.java */
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
        System.out.println("memberService.getClass());
        // output: class hello.hellospring.service.MemberService$$EnhancerBySpringCGLIB$$bf9c0667
        // TimeTraceAop 코드를 삭제해도 그대로여서 항상 proxy 객체를 만드는 것인지 궁금합니다!
    }

    // (생략)
}


/* service.MemberService.java */
public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
        System.out.println(this.getClass());
        // output: class hello.hellospring.service.MemberService
    }

    // 생략
}

긴글 읽어주셔서 감사합니다!

답변 2

3

김영한님의 프로필 이미지
김영한
지식공유자

2021. 04. 04. 21:41

안녕하세요. 대훈님

스프링은 AOP를 사용하지 않으면 기본적으로 프록시를 사용하지 않습니다.

그런데 프록시로 보인 이유는 아마도 다음 애노테이션 때문일거에요^^

@Transactional

트랜잭션 처리를 위해서 스프링이 내부에서 AOP 처리를 합니다.

감사합니다.

1

어디님의 프로필 이미지
어디
질문자

2021. 04. 06. 00:18

안녕하세요 영한님!

친절하게 설명해주셔서 감사합니다 ㅠㅠ

@Transactional 내부에서 AOP 처리를 하는군요. 알려주셔서 감사합니다!

없애보니 똑같이 `class hello.hellospring.service.MemberService` 만 나오는 것을 확인하였습니다.

감사합니다 :)

어디님의 프로필 이미지

작성한 질문수

질문하기