본문 바로가기

Spring

[Spring] 빈(Bean)


빈(Bean)이란?


빈(Bean)은 스프링 컨테이너가 관리되는 재사용 소프트웨어 컴포넌트입니다.

  • 빈은 인스턴스화된 객체를 의미합니다.
  • 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 합니다.
  • @Bean이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록합니다.
  • 빈은 클래스 등록정보, getter/setter 메서드를 포함합니다.
  • 빈은 컨테이너에 사용되는 설정 메타데이터로 생성됩니다.
  • 설정 메타 데이터
    • XML 또는 자바 애너테이션, 자바 코드로 표현합니다.
    • 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체를 정의합니다.

 

빈 접근 방법

  • ApplicationContext를 사용하여 빈 정의를 읽고 액세스 할 수 있습니다.
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

PetStoreService service = context.getBean("memberRepository", memberRepository.class);

List<String> userList = service.getUsernameList();

위의 코드 예제를 보도록 하겠습니다.

  • getBean을 사용하여 빈의 인스턴스를 가져올 수 있습니다.
  • ApllicationContext 인터페이스는 빈을 가져오는 몇 가지 방법들이 있습니다.

 

BeanDefinition

스프링은 다양한 설정 형식을 BeanDefinition이라는 추상화 덕분에 지원할 수 있습니다.

  • 빈은 BeanDefinition(빈 설정 메타정보)으로 정의되고 BeanDefinition에 따라서 활용하는 방법이 달라집니다.
  • BeanDefinition(빈 설정 메타정보)
    • 속성에 따라 컨테이너가 빈을 어떻게 생성하고 관리할지 결정합니다.
    • @Bean이나 <bean> 당 각 1개씩 메타 정보가 생성됩니다.
    • Spring이 설정 메타 정보를 BeanDefinition 인터페이스를 통해 관리하기 때문에 컨테이너 설정을 XML, Java로 할 수 있습니다.

 

BeanDefinition 개체가 포함하고 있는 메타데이터

  1. 패키지 수식 클래스 이름: 일반적으로 정의되는 빈의 실제 구현 클래스입니다.
  2. 빈 동작 구성 요소: 컨테이너에서 빈이 어떻게 동작해야 하는지 설명합니다.
  3. 빈이 작업을 수행하는 데 필요한 다른 빈에 대한 참조입니다.
  4. 새로 만든 개체를 설정할 기 타 구성 설정입니다.
  5. 메타데이터는 각 빈 정의를 구성하는 속성 집합으로 변환됩니다.

 

property Explaind in ...
Class 링크
Name 링크
Scope 링크
Constructor arguments 링크
Properties 링크
Autowiring mode 링크
Lazy initialization mode 링크
Initialization method 링크
Destruction method 링크
  • BeanClassName: 생성할 빈의 클래스 명입니다.
  • factoryBeanName: 팩토리 역할의 빈을 사용할 경우의 이름입니다
  • factoryMethodName: 빈을 생성할 팩토리 메서드를 지정합니다.
  • scope: 싱글톤(기본 값)
  • lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때까지 최대한 생성을 지연처리 하는지 여부를 확인합니다.
  • InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명을 지정합니다.
  • DestoryMethodName: 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명입니다.
  • Constructor arguments, Properties: 의존관계 주입에서 사용됩니다.