Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

스프링 빈(Spring Bean)

  • 스프링에서 애플리케이션의 중추(backbone)가 되고, 스프링 IoC 컨테이너에 의해 관리되는 객체(objects)를 빈(beans)이라고 부름.
    Anchor
    body_ref_01
    body_ref_01
    [1]
  • 빈은 인스턴스화하고, 결집된 객체이며, 스프링 IoC 컨테이너에 의해 관리됨.
  • 빈은 애플리케이션의 수많은 객체 중 하나임.
  • 빈은 컨테이너에 의해 사용되는 설정 메타데이터(configuration metadata) 안에 빈과 빈 사이의 의존성이 반영됨.

개요

스프링 IoC 컨테이너는 하나 이상의 빈을 관리함.

이러한 빈은 컨테이너에 제공한 설정 메타데이터로 생성됨. (예. XML 기반의 설정 메타데이터에서 있는 <bean/> 정의)

컨테이너 내부에서 이러한 빈 정의는 (다른 정보를 포함하는)  BeanDefinition 객체로 나타내고, 다음 메타데이터를 포함하고 있음.

  • 패키지를 포함한(package-qualified) 클래스명 : 일반적으로 빈의 실제 구현 클래스가 정의됨.
  • 빈의 행동에 대한 설정 요소. 컨테이너에서 빈이 어떻게 동작해야 하는가에 대한 상태(범위, 라이프사이클 콜백 등)
  • 빈이 동작하는 데 필요한 다른 빈들에 대한 참조. 이러한 참조를 협력자(collaborators) 또는 의존성(dependencies)이라도 함.
  • 새로 생성된 객체에 설정해야 하는 그 외 설정값. 예를 들어 커넥션 풀을 관리하는 빈에서 사용해야 하는 커넥션의 수나 풀의 용량 제한 등임.

이 메타 데이터는 각각의 빈을 정의하는 프로퍼티 세트로 변환됨.

Tip
title참고

빈 정의 프로퍼티에 대해서는 아래 소스를 참고하자.

빈 정의

프로퍼티설명
class빈으로 만들 클래스
name식별자
scope빈의 범위
constructor arguments종속성 주입(생성자)
properties종속성 주입(Setter)
autowiring mode종속성 주입(자동주입)
lazy-initialization mode빈 생성을 늦춤(시작시가 아닌 첫 호출시)
initialization method빈이 생성되었을 때 호출하는 콜백 메서드
destruction method빈이 소멸되었을 때 호출하는 콜백 메서드

스프링 컨테이너 외부에서 생성한 객체 등록

ApplicationContext 구현체는 특정 빈을 생성하는 방법에 대한 정보가 들어있는 빈 정의 외에도 사용자가 컨테이너 외부에서 생성한 기존 객체의 등록을 허용함.

getBeanFactory() 메서드로 ApplicationContext의 BeanFactory에 접근해서 이러한 객체들을 등록함.

getBeanFactory() 메서드는 BeanFactory를 구현한 DefaultListableBeanFactory를 리턴함.

DefaultListableBeanFactory는 registerSingleton (..) 및 registerBeanDefinition (..) 메소드를 통해 이러한 등록을 지원함.

하지만 일반적인 애플리케이션은 메타데이터 빈 정의를 통해 정의된 빈으로만 동작함.

Warning
title주의
  • 빈 메터데이터와 수동으로 등록되는 싱글톤 인스턴스는 컨테이너가 정확히 추론할 수 있도록 자동 빈 설정(autowiring) 및 기타 인트로스펙션(introspection) 단계에서 가능한한 빨리 등록해야 함.
  • 기존 메터데이터와 기존 싱글톤 인스턴스를 재정의 하는 것은 어느정도 지원함.
  • 런타임 시에(팩토리에 대한 라이브 엑세스와 동시에) 새로운 빈의 등록은 공식적으로 지원하지 않으며, 빈 컨테이너에서 동시 접근 예외(concurrent access exceptions) 또는 불일치 상태를 유발할 수 있음.


...

Anchor
comment_01
comment_01
[1] ^ http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-introduction