inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

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

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

259

YMMD

작성한 질문수 3

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

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

spring oop

답변 1

2

OMG

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

 

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

 

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

 

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

=> 이 내용이 맞습니다.

감사합니다.

1

OMG

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

 

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

0

YMMD

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

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

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

0

OMG

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

 

0

YMMD

네 감사합니다~~

섹션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