2024. 10. 18. 16:26ㆍSpring Boot/Spring Boot Auto Configuration
DefaultListableBeanFactory
는 스프링 프레임워크의 핵심 클래스 중 하나로, 스프링의 빈 팩토리(BeanFactory)와 애플리케이션 컨텍스트(ApplicationContext)에서 빈을 정의하고 관리하는 역할을 담당하는 빈 팩토리의 기본 구현체입니다. DefaultListableBeanFactory
는 스프링이 빈들을 등록하고 검색하며, 주입하고 관리하는 과정의 중심에 위치한 클래스입니다.
1. 역할 및 특징
DefaultListableBeanFactory
는 여러 인터페이스를 구현하여 다양한 기능을 제공합니다. 주로 다음과 같은 특징을 가집니다:
- BeanFactory의 구현체: 스프링에서 빈을 관리하는 최상위 인터페이스인
BeanFactory
의 구현체로서, 빈을 생성하고 관리하는 기능을 제공합니다. - ListableBeanFactory: 빈 팩토리 내에 등록된 모든 빈의 목록을 제공할 수 있는 기능을 추가로 구현합니다. 빈 정의에 따라 여러 빈을 등록하고, 검색하며,
BeanDefinition
을 기반으로 빈을 관리합니다. - AutowireCapableBeanFactory: 자동으로 빈을 주입하고, 의존성 주입과 관련된 다양한 메커니즘을 제공합니다.
- ConfigurableBeanFactory: 팩토리가 상속받는 빈 정의와 스코프 등의 설정을 제공하는 인터페이스를 구현합니다.
- BeanDefinitionRegistry: 새로운 빈 정의를 등록하거나 기존 빈 정의를 수정할 수 있습니다. 즉, 동적으로 빈 정의를 추가하거나 제거할 수 있습니다.
2. 주요 기능
DefaultListableBeanFactory
는 빈 정의의 등록, 빈 인스턴스의 생성 및 의존성 주입을 포함하여 스프링 애플리케이션에서 빈 관리의 여러 핵심 기능을 수행합니다.
2.1 빈 정의 등록 및 관리
DefaultListableBeanFactory
는 BeanDefinition
을 통해 빈 정의를 등록하고 관리합니다. 빈 정의는 빈의 클래스, 라이프사이클 콜백, 스코프, 의존성 등의 정보를 포함하고 있습니다.
빈 정의를 등록하는 메서드는 주로 다음과 같습니다:
registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
: 빈 이름과 빈 정의를 사용하여 새로운 빈 정의를 등록합니다.
beanFactory.registerBeanDefinition("myBean", beanDefinition);
2.2 빈 검색 및 조회
빈을 조회하는 기능도 제공합니다. DefaultListableBeanFactory
는 ListableBeanFactory
를 구현하여 여러 빈을 조회하거나 특정 타입의 빈을 검색할 수 있습니다.
빈 검색 메서드들은 다음과 같습니다:
getBean(String name)
: 지정된 이름의 빈을 검색하여 반환합니다.getBeansOfType(Class<?> type)
: 특정 타입의 모든 빈을 조회하여 반환합니다.containsBeanDefinition(String beanName)
: 지정된 이름의 빈 정의가 등록되어 있는지 확인합니다.
2.3 의존성 주입 및 자동 주입
DefaultListableBeanFactory
는 AutowireCapableBeanFactory
를 구현하여 의존성 주입을 관리하고, 자동으로 빈을 주입하는 기능을 제공합니다. 이를 통해 빈을 생성할 때, 필요한 다른 빈을 자동으로 주입하거나, 빈 생성 후 주입할 수 있습니다.
자동 주입 기능은 다음과 같이 동작합니다:
autowireBean(Object existingBean)
: 기존 객체에 대해 자동으로 빈을 주입합니다.resolveDependency()
: 특정 의존성을 자동으로 주입할 수 있도록 해줍니다.
2.4 스코프 및 라이프사이클 관리
빈의 스코프(싱글톤, 프로토타입 등)를 관리하며, 초기화 및 소멸 메서드와 같은 빈의 라이프사이클을 관리합니다.
- 싱글톤 빈: 기본적으로 스프링은 빈을 싱글톤으로 관리합니다.
DefaultListableBeanFactory
는 이러한 싱글톤 빈의 생명주기를 관리합니다. - 프로토타입 빈: 프로토타입 빈의 경우 매번 새롭게 빈을 생성하는 로직을 관리합니다.
2.5 계층 구조 관리
DefaultListableBeanFactory
는 계층형 빈 팩토리를 지원합니다. 즉, 부모 팩토리를 가질 수 있으며, 부모 팩토리로부터 빈을 검색하거나 상속받을 수 있습니다.
setParentBeanFactory(BeanFactory parentBeanFactory)
: 부모 팩토리를 설정하여 계층 구조를 관리합니다.
3. 구성 요소
DefaultListableBeanFactory
는 다양한 내부 데이터 구조와 메서드를 통해 빈을 관리합니다.
beanDefinitionMap
: 빈 이름을 키로 하고, 해당 빈의BeanDefinition
을 값으로 하는 맵입니다. 모든 등록된 빈의 정의가 여기에 저장됩니다.singletonObjects
: 싱글톤 빈 인스턴스들이 저장되는 캐시입니다. 이미 생성된 싱글톤 빈들은 이 맵에 저장되어 이후에는 새로 생성되지 않고 캐시된 객체를 반환합니다.
4. 라이프사이클
DefaultListableBeanFactory
는 빈 팩토리의 라이프사이클을 관리합니다. 이는 스프링 애플리케이션이 시작되고 종료될 때 빈의 초기화와 소멸 메서드를 호출하는 과정을 포함합니다. 또한, 필요에 따라 팩토리 빈(FactoryBean) 또는 애플리케이션 이벤트 리스너와 같은 다른 스프링 메커니즘과 통합되어 동작합니다.
5. 확장성
DefaultListableBeanFactory
는 매우 확장 가능한 구조로 설계되어 있어, 커스텀 BeanPostProcessor
, BeanFactoryPostProcessor
와 같은 스프링 확장 메커니즘을 추가로 사용하여 빈 생성과 관리 프로세스를 커스터마이징할 수 있습니다.
6. 핵심 구현 인터페이스
DefaultListableBeanFactory
는 여러 인터페이스를 구현하여 다양한 기능을 지원합니다:
ConfigurableListableBeanFactory
: 빈 팩토리의 설정을 제공하며, 빈 팩토리를 구성하고 확장할 수 있는 다양한 메서드를 정의합니다.BeanDefinitionRegistry
: 빈 정의를 등록하거나 제거하는 기능을 제공합니다.ListableBeanFactory
: 빈 목록을 제공하고, 여러 빈을 동시에 관리하는 기능을 추가로 제공합니다.
7. 실제 사용
DefaultListableBeanFactory
는 보통 직접 사용하기보다는 ApplicationContext
의 구현체들 (AnnotationConfigApplicationContext
, XmlWebApplicationContext
등) 내부에서 사용됩니다. ApplicationContext
는 DefaultListableBeanFactory
를 포함하여 스프링 애플리케이션의 빈들을 종합적으로 관리하는 고수준의 컨텍스트를 제공합니다.
DefaultListableBeanFactory
는 스프링 프레임워크에서 빈 정의를 등록하고, 빈을 생성 및 관리하며, 의존성을 주입하는 등의 역할을 수행하는 기본적인 빈 팩토리입니다. 스프링의 확장성과 유연성을 제공하는 핵심 클래스 중 하나로, 빈 팩토리의 핵심적인 기능을 모두 지원합니다.
'Spring Boot > Spring Boot Auto Configuration' 카테고리의 다른 글
Spring Boot Auto-Configuration (0) | 2024.10.18 |
---|---|
ConfigurationClassPostProcessor (1) | 2024.10.18 |
ConfigurationClassParser (0) | 2024.10.18 |
PostProcessorRegistrationDelegate (0) | 2024.10.18 |
AnnotationConfigServletWebServerApplicationContext (0) | 2024.10.18 |