본문 바로가기

SpringFramework Core - I. IoC 컨테이너/3. Bean 개관

3. Bean Overview

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-definition

 

 

스프링 IoC 컨테이너는 하나 이상의 bean을 관리한다. 이 bean들은 여러분들이 컨테이너에게 제공한 설정 메타데이터를 통해 생성된 것이다. (예를 들어, XML의 <bean/> 정의들을 통해)

 

컨테이너 스스로에게는 이러한 bean들이 'BeanDefinition' 객체로 나타난다. 그리고 그 객체들은 다음의 메타데이터를 포함하고 있다. 

  • package-qualified 클래스 이름: bean이 정의될 때 실제 실행되는 클래스
  • bean이 컨테이너 안에서 어떤 행동을 해야하는지 설명하는, bean의 행동 설정 요소들(scope, 라이프사이클 콜백들 등)
  • bean이 자신의 일을 해내기 위해 필요한 다른 bean들의 참조 정보. 이 참조들은 '협력자들 또는 의존성'이라고 불린다.
  • 새롭게 생성된 객체를 세팅하기 위한 여타의 설정들. 예를 들어 pool의 크기 제한이라든가 connection pool을 관리하는 bean 안에서 사용할 수 있는 connection의 개수 등.

 

이 메타데이터들은 bean 정의를 만들어내기 위한 일련의 속성들로 번역된다. 다음 테이블은 이 속성들을 보여준다.

속성 다음에서 설명함
Class Bean 인스턴화 하기
Name Bean에 이름 붙이기
Scope Bean Scopes
Constructor arguments 의존성 주입
Properties 의존성 주입
Autowiring mode 협력자들 Autowiring하기
Lazy initialization mode Lazy-initialized Beans
initialization method 초기화 콜백
Destruction method 소멸 콜백

테이블 1. bean 정의

 

특정 bean을 어떻게 생성하는지에 대한 정보를 포함하는 bean 정의와 더불어, ApplicationContext에서는 컨테이너 바깥에서 이미 생성된 객체를 등록하는 기능도 제공한다. 이 일은 ApplicationContext의 BeanFactory가 가진 getBeanFactory() 메소드를 통해 이루어진다. 이 메소드는 BeanFactory의 구현체인 DefaultListableBeanFactory를 반환한다. DefaultListableBeanFactory는 registerSingleton(..)과 registerBeanDefinition(..) 메소드를 통해 이 등록 작업을 지원한다. 그러나 일반적인 애플리케이션들은 보통의 bean 정의 메타데이터를 통해 정의된 bean들만을 전용으로 사용한다.

 

※ bean 메타데이터와 수동으로 제공된 싱글턴 인스턴스들은 가능한 한 빠르게 등록될 필요가 있다. 컨테이너가  autowiring과 내부 검사 작업을 진행하는 동안 적절한 추론을 하도록 하기 위해서다. 이미 존재하는 메타데이터나 이미 존재하는 싱글턴 인스턴스를 오버라이딩하는 것은 어느정도 지원이 되겠지만, 런타임동안 새로운 bean이 등록되는 것은 공식적으로 지원되지 않는다. 이는 실시간 접근 예외나 bean 컨테이너 상태의 불일치를 발생시킬 수 있기 때문이다.