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

이브런님의 프로필 이미지
이브런

작성한 질문수

스프링 핵심 원리 - 기본편

싱글톤 질문 드립니다.

해결된 질문

작성

·

193

1

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
여기에 질문 내용을 남겨주세요.
 
싱글톤 컨테이너 강의를 듣다가 의문점이 생겨 테스트 코드를 추가하면서 질문이 생겼습니다.
 
인스턴스를 생성하지 않고 하나의 객체로 관리하는 것이 싱글톤이라고 이해했습니다. 그래서 다음과 같이 코드를 작성해봤더니
 
@Test
@DisplayName("스프링 컨테이너와 싱글톤")
void springContainer() {

ApplicationContext applicationContext1 = new AnnotationConfigApplicationContext(AppConfig.class);

MemberService memberService1 = applicationContext1.getBean("memberService", MemberService.class);
MemberService memberService2 = applicationContext1.getBean("memberService", MemberService.class);

System.out.println("memberService1 = " + memberService1);
System.out.println("memberService2 = " + memberService2);

assertThat(memberService1).isSameAs(memberService2);

ApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(AppConfig.class);

MemberService memberService3 = applicationContext2.getBean("memberService", MemberService.class);

assertThat(memberService1).isSameAs(memberService3);
}
 
위의 코드에서 applicationContext1에서 가져온 빈과 2에서 가져온 빈이 다르다는 것을 확인했습니다.
 
하나의 스프링 컨테이너에서 관리된다고 생각했는데 아니었네요
 
그렇다면 ApplicationContext의 인스턴스를 계속 생성해줘야 하니 싱글톤이 아닌것 아닌가요? 잘 이해되지 않네요ㅠ
 

답변 1

1

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

 

 ApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(AppConfig.class);

ApplicationContext 자체가 스프링 컨테이너이기 때문에 서로 다른 스프링 컨테이너를 2개 생성하신 것으로

서로 다른 빈이 생성되는게 맞습니다.

 

질문에 대한 직접적인 답변은 아니지만 참고하시면 도움 되리라 생각합니다.

https://www.inflearn.com/questions/212497


감사합니다.

이브런님의 프로필 이미지
이브런

작성한 질문수

질문하기