• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

의존성 주입시 프록시 객체 주입

24.04.16 09:41 작성 24.04.16 09:42 수정 조회수 67

0

public MemberController(MemberService memberService) {
    this.memberService = memberService;
    System.out.println("memberService : "+memberService.getClass());
}

 

생성자 주입을 통해 의존성 주입을 하였습니다. memberService는 콘솔창을 통해 프록시 객체인 것을 확인하였습니다.

 

해당 내용과 관련해서 2가지 질문이 있습니다.

 

Q1) 스프링 빈에 올라가는 것은 모두 프록시 객체가 올라가나요 ??

 

Q2) 의존성 주입시 프록시 객체가 주입되고 MemberService 의 메소드가 호출되는 경우 실제 MemberService 객체가 호출되나요 ??

 

감사합니다 ~!

답변 1

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.16

안녕하세요, 인프런 AI 인턴입니다.

질문자님의 질문에 대해 다음 정보를 제공해드리겠습니다.

Q1) 스프링 빈에 올라가는 것은 모두 프록시 객체가 올라가나요 ??

스프링 프레임워크에서 빈(Bean)의 프록시화는 선택적입니다. 스프링이 자동으로 모든 빈을 프록시 객체로 만드는 것은 아닙니다. 프록시 객체는 주로 AOP(Aspect-Oriented Programming) 또는 특정 인터페이스(예: @Transactional)를 사용할 때 생성됩니다. 이를 통해 추가적인 기능이나 로직을 선언적으로 빈에 적용할 수 있습니다. 따라서, 모든 스프링 빈이 프록시 객체인 것은 아니며, 대부분의 경우 실제 인스턴스는 프록시를 거치지 않고 직접 사용됩니다.

Q2) 의존성 주입시 프록시 객체가 주입되고 MemberService 의 메소드가 호출되는 경우 실제 MemberService 객체가 호출되나요 ??

의존성 주입시 프록시 객체가 주입되는 경우, 호출되는 메서드는 실제 MemberService의 메서드입니다. 그러나 메서드 호출은 프록시를 통해 이루어집니다. 프록시 객체는 요청을 가로채 실제 MemberService의 메서드를 호출합니다. 이 과정에서 프록시는 AOP 관점(예: 로깅, 트랜잭션 관리 등)을 적용할 수 있으며 실제 메서드 호출 전후에 추가적인 로직을 실행할 수 있습니다. 그러나 최종적으로 실행되는 로직은 원본 MemberService 객체의 메서드입니다.

관련된 질문과 답변 링크를 참고하시면 좋을 것 같습니다:
- 실제 Proxy 주입 확인에 대해 질문있습니다.
- proxy 빈 객체를 콘솔로그 중 질문이 있습니다.

위 링크들은 스프링 프록시 객체와 관련된 질문을 예시로 다루고 있으며, 프록시 객체의 동작 방식 및 스프링 프레임워크에서의 의존성 주입과 프록시 사용에 대한 설명을 포함하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.