[Spring] 빈(Bean)

SEB_BE_43_yeori316·2023년 2월 5일
0

Spring

목록 보기
7/22

빈(Bean)

  • 스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트

  • 빈(bean)은 인스턴스화된 객체를 의미

  • 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 함

  • @Bean이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록

  • 빈은 클래스의 등록정보, 게터/세터 메서드를 포함

  • 빈은 컨테이너에 사용되는 설정 메타데이터로 생성됨

  • 설정 메타데이터
    • XML 또는 자바 애너테이션, 자바 코드로 표현
    • 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체를 정의

bean 접근 방법

  • ApplicationContext 사용하여 bean 정의를 읽고 액세스할 수 있다.
// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

// retrieve configured instance
PetStoreService service = context.getBean("memberRepository", memberRepository.class);

// use configured instance
List<String> userList = service.getUsernameList();
  • getBean 을 사용하여 bean의 인스턴스를 가져올 수 있다.

  • ApplicationContext 인터페이스는 bean을 가져오는 몇 가지 방법들이 있다.

  • 실제적으로 응용 프로그램 코드에서는 getBean() 메서드로 호출하여 사용하면 안됨!!!

BeanDefinition

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

  • Bean은 BeanDefinition(빈 설정 메타정보)으로 정의되고 BeanDefinition에 따라서 활용하는 방법이 달라지게 됨.

  • BeanDefinition (빈 설정 메타정보)
    • 속성에 따라 컨테이너가 Bean을 어떻게 생성하고 관리할지 결정
    • @Bean or 당 각 1개씩 메타 정보가 생성됨
    • Spring이 설정 메타정보를 BeanDefinition 인터페이스를 통해 관리하기 때문에 컨테이너 설정을 XML, Java로 할 수 있는 것임
    • 스프링 컨테이너는 설정 형식이 XML인지 Java 코드인지 모르고 BeanDefinition만 알면 된다.

핵심 포인트

  • 소프트웨어 개발 용어의 관점에서 컨테이너란 내부에 또 다른 컴포넌트를 가지고 있는 어떤 컴포넌트를 의미

  • 컨테이너는 먼저 객체를 생성하고 객체를 서로 연결함

  • 객체를 설정하는 단계를 지나 마지막으로 생명주기 전반을 관리

  • 컨테이너는 객체의 의존성을 확인해 생성한 뒤 적절한 객체에 의존성을 주입

  • 스프링은 스프링 컨테이너를 통해 객체를 관리

  • 스프링 컨테이너에서 관리되는 객체를 빈(Bean)이라고 함


심화

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

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

property

  • Class
  • Name
  • Scope
  • Constructor arguments
  • Properties
  • Autowiring mode
  • Lazy initialization mode
  • Initialization method
  • Destruction method
  • BeanClassName : 생성할 빈의 클래스 명(자바 설정처럼 팩토리 역할의 빈을 사용하면 없음)

  • factoryBeanName : 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfig

  • factoryMethodName : 빈을 생성할 팩토리 메서드 지정, 예) userService

  • Scope : 싱글톤(기본값)

  • lazyInit : 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때까지 최대한 생성을 지연처리 하는지 여부

  • InitMethodName : 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명

  • DestoryMethodName : 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명

  • Constructor arguments, Properties : 의존관계 주입에서 사용한다. (자바 설정처럼 팩터리 역할의 빈을 사용하면 없음)

0개의 댓글