스프링 컨테이너에 대한 질문입니다
259
작성한 질문수 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
이것으로 인하여 결과가 다른건가요??!
답변 1
2
안녕하세요. YMMD님, 공식 서포터즈 OMG입니다.
ApplicationContext인터페이스 그자체가 스프링컨테이너인데요, ApplicationContext인터페이스를 구현한 AnnotationConfigApplicationContext클래스 가 현재 코드에서 스프링컨테이너의 역할을 하고 있습니다.
스프링컨테이너 ac 와 ac2 2개를 생성하였으므로 서로다른 컨테이너가 생성된 것으로 보시면 되며, 그로 인해 동일한 타입의 빈이지만 서로 다른 참조값을 가지고 있는 것입니다.
이런경우는 표(빈 저장소)가 두개가 생기는건가 싶기도하고 혼란이옵니다 ㅠㅠ
=> 이 내용이 맞습니다.
감사합니다.
1
동일한 질문은 아니지만 관련이 있기 때문에 참고하시면 도움이 되실 수 도 있을 것 같아 링크 첨부합니다.
0
답변주셔서 감사합니다 ㅎㅎ
궁금한점이 해결 되었어요 !! 최고의 서포터즈
그리고 지금까지 배운내용 정리하면서 되짚고있는데 질문드릴 내용이 또 나와서,, 답변에다가 추가적으로 질문드려도 될까요 ??
0
추가 질문의 경우 질문의 내용을 글 작성한 서포터즈만 알림이 오기 때문에 영한님과 서포터즈분들이 확인 할 수 있도록 글을 새로 써주시면 감사하겠습니다. 본 질문과 관련되어 추가적인 궁금증이라면 글의 링크를 첨부해주세요.
섹션3. 11 회원객체 다이어그램
0
31
1
OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.
0
31
1
코드 자료
0
67
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
71
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
89
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
97
1
빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?
0
84
1
테스트 속도가 나중에 영향이 있을까요?
0
84
1
gradle 설정 안떠서 질문 남깁니다!
0
129
2
build.gradle로 프로젝트를 여는 이유
0
95
1
provider 사용하는 이유
0
96
1
다음 강의 뭘 들어야 할까요
0
131
2
프로토타입 빈, 직접 destroy 호출 안 할 경우
0
67
1
beanB
0
85
2
퀴즈다시풀기
0
70
1
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
0
99
2
"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.
0
68
3
run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>
0
107
2
도메인의 정의?
0
60
1
ApplicationContext 질문입니다.
0
67
1
@Scope의 proxyMode를 사용할때 단위 테스트 방법
0
97
2
ai api 선정하기 관련 질문
0
127
2
생성자 자동주입 관련해서
0
68
1
생성자 직접 호출 vs 팩토리 메서드 패턴
0
100
2





