BeanDefinition은 스프링 컨테이너가 스프링 빈을 생성하고 관리하기 위해 사용하는 설정 메타정보 추상화 모델이다.
Spring은 BeanDefinition이라는 추상화를 통해 다양한 설정 형식을 지원할 수 있는 것이다.

주요 속성은 다음과 같다.

- BeanClassName: 생성할 빈의 클래스명
- 예) hello.core.service.MemberServiceImpl
- 팩토리 메서드 방식에서는 생략될 수 있다.
- factoryBeanName: 팩토리 역할을 하는 빈의 이름
- 예) appConfig
- factoryMethodName: 빈을 생성할 팩토리 메서드명
- 예) memberService
- Scope: 빈의 범위(기본값: 싱글톤)
- 예) singleton, prototype
- lazyInit: 빈을 지연 초기화할지 여부
- true로 설정 시 스프링 컨테이너가 빈을 바로 생성하지 않고, 실제 사용할 때까지 생성을 지연한다.
- InitMethodName: 빈의 초기화 메서드
- 빈 생성 후 의존관계 주입이 완료된 뒤 호출된다.
- DestroyMethodName: 빈의 소멸 메서드
- 빈의 생명주기가 끝나기 직전에 호출된다.
- Constructor Arguments, Properties: 의존관계 주입 시 사용된다.