BeanDefinition
- 스프링은 Bean에 관한 정보를
BeanDefinition
으로 추상화 시켰기 때문에 다양한 설정 형식을 지원해 준다. (역할과 구현을 개념적으로 잘 나눈 것)
- xml을 읽어 BeanDefinition을 만들거나, java로 BeanDefinition을 만들면 된다. (스프링 컨테이너는 java인지 xml인지 알 필요가 없고 BeanDefinition만 알면 된다)
- 인터페이스 BeanDefinition은 빈 설정 메타 정보라 한다.
- @Bean, 당 각각 하나씩 메타 정보가 생성됨
- 스프링 컨테이너는 이 메타 정보를 바탕으로 스프링 빈을 생성한다.
BeanDefinition 구조
- BeanClassName : 생성할 빈의 클래스 이름
- factoryBeanName : 팩토리 역할의 빈을 사용할 경우(appConfig)
- factoryMethodName : 빈을 생성할 팩토리 메서드 지정
- Scope : 디폴트 값은 싱글톤
- lazyInit : 스프링 컨테이너를 생성할 때 빈을 생성하는게 아니라 실제 빈을 사용할 때 까지 최대한 생성을 지연처리 하는지 여부
- InitMethodName : 빈 생성, 의존관계를 적용후 호출되는 초기화 메서드 명
- DestroyMethodName : 빈의 생명주기가 끝나서 제거하기 직전 호출되는 메서드 명
- Constructor arguments, Properties : 의존관계 주입에서 사용