🤗 인프런 [스프링 핵심원리-기본편]을 듣고 기록하는 글입니다
전까지 했던 코드가 싱글톤이라고 했는데, 진짜로 싱글톤이 맞는지 의심이 됨
각각 다른 MemoryMemberRepository가 생성돼서 싱글톤이 깨지는거처럼 보임. 과연 Spring Container는 이걸 어떻게 싱글톤으로 관리하는가?
//MemberServiceImpl
//테스트 코드
public MemberRepository getMemberRepository() {
return memberRepository;
}
//OrderServiceImpl
//테스트 코드
public MemberRepository getMemberRepository() {
return memberRepository;
}
//테스트코드
//분명 자바코드로 내가 직접 만든거라 싱글톤 깨질 줄 알았는데, 객체가 같음
@Test
void configurationTest() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class);
OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class);
MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class);
MemberRepository memberRepository1 = memberService.getMemberRepository();
MemberRepository memberRepository2 = orderService.getMemberRepository();
System.out.println("memberRepository1 = " + memberRepository1);
System.out.println("memberRepository2 = " + memberRepository2);
System.out.println("memberRepository = " + memberRepository);
}
이제, appconfig쪽에서 bean 함수 호출때마다 "call AppConfig.memberService"이런식으로 출력문 출력하게끔 코드를 바꾸고,
//appconfig에서 객체가 호출되는 순서를 보기위해 출력문 작성
public class AppConfig {
//spring container라는 증거
@Bean
public MemberService memberService() {
System.out.println("call AppConfig.memberService");
return new MemberServiceImpl(memberRepository());
}