@configuration 및 싱글톤

실제로 @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 컨테이너는 이 문제를 어떻게 해결합니까?

직접 테스트해 봅시다.

`확인용 코드 추가`