[Spring] 스프링 빈 설정 메타 정보 - BeanDefinition

jy9922·2022년 8월 22일
0

Spring

목록 보기
26/34
post-thumbnail

스프링 빈 설정 메타 정보 - BeanDefinition

스프링은 어떻게 이런 다양한 설정 형식을 지원할까?

Beandefinition

  • 추상화 개념, 빈 설정 메타 정보
    • @Bean, <bean> 당 각각 하나씩 메타 정보가 생성된다.
    • 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.
  • 역할과 구현을 개념적으로 나눈 것
    • XML을 읽어서 BeanDefinition을 만들면 된다.
    • 스프링 컨테이너는 자바 코드인지, XML 코드인지 몰라도 된다.
    • 오직 BeanDefinition만 알면 된다.
    • 즉, 스프링 컨테이너는 추상화만 알면 된다.

코드 레벨로 조금 더 깊이 있게 들어가보기

  • AnnotationConfigApplicationContextAnnotatedBeanDefinitionReader를 사용해서 AppConfig.class를 읽고 BeanDefinition을 생성한다.
  • GenericXmlApplicationContextXmlBeanDefinitionReader를 사용해서 appConfig.xml를 읽고 BeanDefinition을 생성한다.
  • 새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader를 만들어서 BeanDefinition을 생성하면 된다.

BeanDefinition 살펴보기

public class BeanDefinitionTest {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

    @Test
    @DisplayName("빈 설정 메타정보 확인")
    void findApplicationBean(){
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

            if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
                System.out.println("beanDefinitionName = "+ beanDefinitionName + "beanDefinition = " + beanDefinition);
            }
            
        }
    }
}

BeanDefinition 정보

  • BeanClassName : 생성할 빈의 클래스 명 (자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)
  • factoryBeanName : 팩토리 역할의 빈을 사용할 경우 이름 ( ex. appConfig )
  • factoryMethodName : 빈을 생성할 팩토리 메서드 지정 ( ex. memberService )
  • Scope : 싱글톤 ( 기본값 )
  • lazyInit : 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때까지 최대한 생성을 지연처리 하는지 여부
  • InitMethodName : 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드명
  • DestroyMethodName : 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드명
  • Constructor arguments, Properties : 의존관계 주입에서 사용 ( 자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음 )

0개의 댓글