본문 바로가기
JAVA/Spring

2. spring beans 모듈

by sihyeong 2025. 7. 3.

두번째로 알아볼 모듈은  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)

  1. XmlBeanDefinitionReader가 XML 파일을 파싱
  2. 각 <bean> 태그를 BeanDefinition으로 변환
  3. BeanDefinitionRegistry에 등록
  4. 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