-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
스프링 컨테이너에 대한 질문입니다
21.10.15 01:17 작성 조회수 141
3
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
이것으로 인하여 결과가 다른건가요??!
답변을 작성해보세요.
2
OMG
2021.10.15
안녕하세요. YMMD님, 공식 서포터즈 OMG입니다.
ApplicationContext인터페이스 그자체가 스프링컨테이너인데요, ApplicationContext인터페이스를 구현한 AnnotationConfigApplicationContext클래스 가 현재 코드에서 스프링컨테이너의 역할을 하고 있습니다.
스프링컨테이너 ac 와 ac2 2개를 생성하였으므로 서로다른 컨테이너가 생성된 것으로 보시면 되며, 그로 인해 동일한 타입의 빈이지만 서로 다른 참조값을 가지고 있는 것입니다.
이런경우는 표(빈 저장소)가 두개가 생기는건가 싶기도하고 혼란이옵니다 ㅠㅠ
=> 이 내용이 맞습니다.
감사합니다.
YMMD
질문자2021.10.16
답변주셔서 감사합니다 ㅎㅎ
궁금한점이 해결 되었어요 !! 최고의 서포터즈
그리고 지금까지 배운내용 정리하면서 되짚고있는데 질문드릴 내용이 또 나와서,, 답변에다가 추가적으로 질문드려도 될까요 ??
OMG
2021.10.16
추가 질문의 경우 질문의 내용을 글 작성한 서포터즈만 알림이 오기 때문에 영한님과 서포터즈분들이 확인 할 수 있도록 글을 새로 써주시면 감사하겠습니다. 본 질문과 관련되어 추가적인 궁금증이라면 글의 링크를 첨부해주세요.
답변 1