두번째로 알아볼 모듈은 spring core 모듈이다.
spring-beans 모듈은 스프링의 핵심 기능 중 하나인 의존성 주입(Dependency Injection)을 담당하는 매우 중요한 라이브러리다.
자바 객체(빈)을 정의하고 관리하는 기능을 제공한다.스프링 IoC(Inversion of Control) 컨테이너에서 사용할 객체 정보를 읽고, 이를 기반으로 객체를 생성하고 관리하는 엿할을 한다.
이 모듈은 XML, 어노테이션, JavaConfig 등으로 정의된 객체(Bean)의 설정 정보를 해석하고 실제 객체를 생성 및 주입하여. 빈의 라이프 사이클을 처리하는 역할을 수행한다.
주요 기능
1. Bean 정의 및 등록
- XML 파일이나 어노테이션(@Component, @Bean)을 통해 정의된 Bean을 파싱하여 BeanDefinition으로 변환
- 각 Bean의 의존 관계, 초기화 메서드, scope 등 설정을 처리
* BeanDefinition
- 스프링 컨테이너가 빈을 생성하고 관리하기 위해 사용하는 메타데이터를 담고 있는 객체
- 빈에 대한 모든 정보(클래스, 생성자, 의존성, scope, 초기화 메서드 등)을 저장해 놓은 틀이다.
org.springframework.beans.factory.config.BeanDefinition
위의 인터페이스는 스프링이 내부적으로 Bean을 정의하고, 이를 IoC 컨테이너에서 관리하기 위한 정보(메타데이터)를 담고 있는 구조체이다.
스프링은 XML, Java Config, Annotaion 등 다양한 방식으로 정의된 Bean 설정을 이 BeanDefinition으로 변환하여 내부에서 처리한다.
BeanDefinition이 담고 있는 주요 정보
| 속성 | 설명 |
| beanClassName | 빈의 클래스 이름 (com.example.MyService) |
| scope | 빈의 범위 (singleton, prototype) |
| constructorArgumentValues | 생성자 주입을 위한 값들 |
| propertyValues | 세터나 필드를 통한 의존성 주입 정보 |
| initMethodName | 초기화 메서드 이름 |
| destroyMethodName | 소멸 메서드 이름 |
| lazyInit | 지연 초기화 여부 |
| dependsOn | 이 빈보다 먼저 초기화되어야 할 빈 이름들 |
| autowireMode | 자동 주입 방식 (no, byName, byType, constructor) |
| primary | 동일 타입의 빈 중 우선 순위 지정 여부 |
이러한 BeanDefinition을 통해 빈 간의 의존 관계를 해석하고 연결할 수 있다.BeanDefinition을 통해 런타임에 동적으로 빈 정의를 추가하거나 수정할 수 있다.
Spring 내부 흐름 (XML)
- XmlBeanDefinitionReader가 XML 파일을 파싱
- 각 <bean> 태그를 BeanDefinition으로 변환
- BeanDefinitionRegistry에 등록
- DefaultListableBeanFactory에서 Bean 생성 시 사용
한마디로 정리하면 ApplicationContext 내부에서 사용되며 스프링은 BeanDefinition을 통해 Bean을 관리한다.
2. 의존성 주입 (DI)
- 각종 설정 정보로 생성한 Bean의 BeanDefinition 정보를 바탕으로 생성자 주입, 필드 주입, 세터 주입 등 다양한 방법으로 객체간 의존성을 주입한다.
3. Bean Lifecycle 관리
- Bean의 생성, 초기화 (@PostConstruct, init-method), 소멸(@PreDestroy, destroy-method) 단계 처리
- Aware 인터페이스 (BeanNameAware, ApplicationContextAware)등을 통한 컨테이너 정보 주입
* BeanNameAware 인터페이스
- 빈 초기화 과정 중 실행되며, 해당 인터페이스를 구현하는 클래스가 등록된 빈의 이름을 알려준다.
4. Property 설정 지원
- PropertyEditor, TypeConverter 등을 통해 다양한 형시그이 값 변환 및 주입 지원'
5. 유연한 메타데이터 형식 지원
- XML, Annotation, Java Config 등 Bean을 정의하는 여러 방법을 제공한다.
* spring-beans 의 주요 클래스 및 인터페이스
| 클래스 / 인터페이스 | 설명 |
| BeanFactory | 스프링 IoC 컨테이너의 최상위 인터페이스 |
| ApplicationContext | BeanFactory를 확장한 컨테이너 인터페이스 |
| BeanDefinition | Bean의 메타 정보를 담는 객체 |
| BeanWrapper | Bean의 프로퍼티에 접근하는 데 사용 |
| PropertyEditor | 문자열을 객체로 변환하는 데 사용 |
| InstantiationAwareBeanPostProcessor | Bean 생성 전/후 로직 수행을 위한 확장 지점 |
'JAVA > Spring' 카테고리의 다른 글
| 1. spring core 모듈 (0) | 2025.07.02 |
|---|---|
| 메시지, 국제화 LocaleResolver 구현 (2) | 2023.12.05 |
| 메시지, 국제화 (0) | 2023.12.04 |