실제로 @Configuration은 싱글톤 때문에 존재합니다.
다음 AppConfig 코드를 살펴보겠습니다.
(뭔가 이상한)
public class AppConfig {
// @Bean memberService --> new MemoryMemberRepository()
// @Bean orderService --> new MemoryMemberRepository()
@Bean
public MemberService memberService() {
return new MemberServiceImpl(new memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(
memberRepository(),
discountPolicy());
}
...
}
– MemberService bean을 생성하는 코드를 보면 memberRepository()가 호출된다.
– 이 메서드를 호출하면 new MemoryMemberRepository()가 호출됩니다.
– orderService bean을 생성하는 코드도 같은 방식으로 memberRepository()를 호출한다.
– 이 메서드를 호출하면 new MemoryMemberRepository()가 호출됩니다.
결과적으로 두 개의 서로 다른 MemoryMemberRepositories가 생성되어 싱글톤이 손상된 것처럼 보입니다.
Spring 컨테이너는 이 문제를 어떻게 해결합니까?
직접 테스트해 봅시다.
`확인용 코드 추가`