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

YMMD님의 프로필 이미지
YMMD

작성한 질문수

스프링 핵심 원리 - 기본편

컴포넌트 스캔과 의존관계 자동 주입 시작하기

스프링 컨테이너에 대한 질문입니다

작성

·

204

3

안녕하세요 ~! 영한님 강의 너무 잘 보고 있습니다!! 최고의 강사
 
강의 듣고 혼자 테스트해보다가 질문이 생겨서 처음으로 질문을 남깁니다 !!
AutoAppConfig 클래스와 동일한 코드의 AutoAppConfig2를 만들어서 테스트를 진행해보았는데요...
 
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);

AnnotationConfigApplicationContext ac2 = new AnnotationConfigApplicationContext(AutoAppConfig2.class);

MemberService memberService = ac.getBean(MemberService.class);
MemberService memberService2 = ac2.getBean(MemberService.class);

assertThat(memberService).isSameAs(memberService2);

위와같이 하면 같지않다고 테스트코드에서 에러를 발생시키는데 이유를 알고싶습니다..

 

밑에 Stack Trace??를 확인해보니까

Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@7a419da4

Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@704f1591

이것의 참조값이 다른것으로 보이는데 혹시 위에서 new AnnotationConfigApplicationContext를 두번 new 해서 다른 참조값을 가졌고, 그로인해서 isSameAs가 테스트실패를 발생시키는 건가요??

아니면 @Configuration이 붙은 Config class가 두개라서 각각 다른 컨테이너 영역?? 같은것이 있는건가요??

제 머릿속에는 그 스프링 빈 저장소 표가 그려지는데 @Configuration이 붙은 다른 클래스이긴 해도 스프링 컨테이너는 한개일 것같은데.. 빈이름이 같은게 두개가 들어가지는 않을꺼고.. 이런경우는 표(빈 저장소)가 두개가 생기는건가 싶기도하고 혼란이옵니다 ㅠㅠ

아참 그리고 두개의 빈을

AutoAppConfig bean = ac.getBean(AutoAppConfig.class);
System.out.println("bean = " + bean.getClass());
AutoAppConfig2 bean2 = ac2.getBean(AutoAppConfig2.class);
System.out.println("bean = " + bean2.getClass());

위의 코드로 결과를 보니 아래와같은 결과가 나왔습니다

bean = class hello.core.AutoAppConfig$$EnhancerBySpringCGLIB$$6c114215

bean = class hello.core.AutoAppConfig2$$EnhancerBySpringCGLIB$$e5b62b57

이것으로 인하여 결과가 다른건가요??!

답변 1

2

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

 

ApplicationContext인터페이스 그자체가 스프링컨테이너인데요, ApplicationContext인터페이스를 구현한 AnnotationConfigApplicationContext클래스 가 현재 코드에서 스프링컨테이너의 역할을 하고 있습니다.

 

스프링컨테이너 ac 와 ac2 2개를 생성하였으므로 서로다른 컨테이너가 생성된 것으로 보시면 되며, 그로 인해 동일한 타입의 빈이지만 서로 다른 참조값을 가지고 있는 것입니다.

 

이런경우는 표(빈 저장소)가 두개가 생기는건가 싶기도하고 혼란이옵니다 ㅠㅠ

=> 이 내용이 맞습니다.

감사합니다.

동일한 질문은 아니지만 관련이 있기 때문에 참고하시면 도움이 되실 수 도 있을 것 같아 링크 첨부합니다.

 

AppConfig가 스프링 컨테이너인 거죠? - 인프런 | 질문 & 답변 (inflearn.com)

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

답변주셔서 감사합니다 ㅎㅎ

궁금한점이 해결 되었어요 !! 최고의 서포터즈

그리고 지금까지 배운내용 정리하면서 되짚고있는데 질문드릴 내용이 또 나와서,, 답변에다가 추가적으로 질문드려도 될까요 ?? 

추가 질문의 경우 질문의 내용을 글 작성한 서포터즈만 알림이 오기 때문에 영한님과 서포터즈분들이 확인 할 수 있도록 글을 새로 써주시면 감사하겠습니다. 본 질문과 관련되어 추가적인 궁금증이라면 글의 링크를 첨부해주세요.

 

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

네 감사합니다~~

YMMD님의 프로필 이미지
YMMD

작성한 질문수

질문하기