@Configuration과 싱글톤
AppConfig코드를 잘 살펴보면 memberService 빈을 만드는 코드를 보면 memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository() 를 호출한다. orderService 빈을 만드는 코드도 동일하게 memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository() 를 호출한다.
결과적으로 각각 다른 2개의 MemoryMemberRepository 가 생성되면서 싱글톤이 깨지는 것 처럼 보인다!
저렇게 생성되는 new로 memberRepository들은 각각 같은 인스턴스일까 다른 인스턴스일까? 로깅을 해보면 memberService, orderService가 호출하는 memberRepository와 memberRepository그 자체는 모두 같은 인스턴스임을 확인할 수 있다!
혹시나 메서드가 호출되지 않았는지 확인하기 위해 메서드마다 출력문을 생성해서 로깅해본다!
예상되는 결과 : 총 3번의 memberRepository() memberService() memberRepository() orderService() memberRepository() memberRepository() //그 자체
실제 결과
이 결과를 확인하면서 알 수 있듯이, 스프링에서 싱글톤을 관리해주는 것 같다! =>비밀은 바로 @Configuration 애노테이션을 적용한 AppConfig에 있다!
Last updated