IoC 컨테이너에 대해

pepe·2025년 12월 2일

IoC 동작 순서

      main() 실행
          ↓
SpringApplication.run()
          ↓
[1] IoC 컨테이너 생성
[2] 컴포넌트 스캔
[3] BeanDefinition 등록
[4] Bean생성 (new)
[5] 의존성 주입(DI)
[6] AOP 프록시 적용 (Transactional 등)
[7] Bean 초기화(@PostConstruct)
[8] 내장 톰캣 실행 → 앱 동작 시작

IoC 컨테이너 종류

  1. BeanFactory
  2. ApplicationContext (BeanFactory의 확장판)

IoC 컨테이너 내부 구조

  1. BeanDefinition Map
    Map<String, BeanDefinition> beanDefinitionMap
  1. 싱글톤 Bean 저장소
    Map<String, Object> singletonObjects
  1. 미완성 Bean 저장소(순환참조 해결용)
    A가 B 필드 필요, B가 A의 필드 필요 (순환 참조)일때,
    A 객체를 반쯤 만들어서(생성자 호출은 끝남)
    earlySingletonObjects에 넣어둔다
    B를 만들 때 여기 있는 A를 먼저 가져다 씀
    이런 방식으로 순환 참조를 해결한다.
    Map<String, Object> earlySingletonObjects
    Map<String, ObjectFactory<?>> singletonFactories
  1. BeanPostProcessor
    @Transactional같은 기능을 구현한 후처리기의 모음
	List<BeanPostProcessor> beanPostProcessors
  1. Alias 저장소
	Map<String, String> aliasMap

실제로 bean을 만드는 과정

  1. 스프링이 클래스를 스캔함 → BeanDefinition 등록
  2. 스프링이 Bean 생성 필요하면 new 함
  3. 생성된 객체를 먼저 earlySingletonObjects에 임시 저장
  4. BeanPostProcessor 실행
  5. 완성된 Bean을 singletonObjects에 저장

IoC의 핵심은 BeanFactory 이므로 다음 3가지가 중요하다.

  1. BeanDefinition Map (설계도)
  2. SingletonObjects Map (실제 Bean 인스턴스)
  3. BeanPostProcessor List
profile
pepe

0개의 댓글