//스프링 컨테이너 생성 ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

🔻

🔻

- 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다.
싱글톤이 깨진 것 처럼 보인다. 사실 스프링은 2번 단계에서 그림과 같은 구조를 가지지 않는다.
@Configuration
과 바이트코드 조작
- Bean 등록과정에서
AppConfig
의 Proxy를 활용함
- 싱글턴 Instance를 반환하는 기능을 추가한 AppConfigProxy를 활용한다.
- 이것은
@Configuration
의 기능으로AppConfig
를@Component
와 같은 어노테이션으로 등록하면 빈의 싱글턴이 깨진다.
@Bean public MemberRepository memberRepository() { if (memoryMemberRepository가 이미 스프링 컨테이너에 등록되어 있으면?) { return 스프링 컨테이너에서 찾아서 반환; } else { //스프링 컨테이너에 없으면 기존 로직을 호출해서 MemoryMemberRepository를 생성하고 스프링 컨테이너에 등록 return 반환 } }