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