스프링 부트를 사용해 웹 애플리케이션을 실행하면, ApplicationContext가 생성되며 초기화되고, 초기화 되는 과정에서 @SpringBootApplication 내부에 존재하는 @Configuration 때문에 @ComponentScan이 활성화 되면서, 패키지 내에 존재하는 모든 컴포넌트를 찾아서 스프링 컨테이너에 등록함
@Configuration 내부에는 @Component 애노테이션이 포함되어있기 때문에 컴포넌트 스캔의 대상이 되어 스프링 컨테이너에 등록됌.
스프링은 내부에서 ConfigurationClassParser 클래스를 사용하여 스캔된 클래스가 설정 클래스인지 확인하고, 설정 클래스인 경우 ConfigurationClassBeanDefinitionReader 클래스를 사용하여, 설정 클래스 내부에 @Bean으로 등록된 메서드를 호출하고 그 결과로, BeanDefinition 객체를 생성함
생성된 객체를 DefaultListableBeanFactory 클래스의 reg--isterBeanDefinition() 메서드를 호출해서 beanDefinitionMap에 저장하고 관리함
그러면 스프링 컨테이너에서 스프링 빈을 조회할 때에는 DefaultListableBeanFactory의 beanDefinitionMap에 저장되어있는 정보를 가지고 스프링 빈을 반환해주고, 관리하는거 맞아?
그럼 실제로 스프링 컨테이너에서 스프링 빈을 관리하는 친구는 DefaultListableBeanFactory 인거야?
맞는거 같은뎅? 혼자 디버깅하면서 찾은거얌?
오오 맞아욤
https://klyp.fyi/lyla
깊게 했네 - dc App
너무깊어도 시간낭비임 - dc App