스프링(1) - Bean Definition
스프링(1) - Bean Definition
사실 스프링 자체를 공부한다기 보다는 진행하는 스터디에서 프레임워크 작업을 하다보니
디자인, 프로토타입 등 클래스 설계에 대한 지식이 부족하다고 느껴서...
이럴 땐 나보다 잘하는 누군가 써놓은 좋은 코드로 공부를 좀 해봐야겠다 싶어서 시작하는 스프링 탐색하기
다 볼 생각은 없고, bean 훓고 궁금한 것 좀 까보다가 social login 이 최종 목표!
스프링 Bean 이란?
- 사실 그냥 JAVA의 객체.
- 왜 그럼 이름이? 스프링의 특징을 생각해보자. IOC, DI의 특징을 가지는 스프링 컨테이너가 관리하는 객체기에
특별히 '스프링 빈'이라고 부르는 것
- UML 부터 보자
- 아 블로그 처음하다보니 레이아웃 잡는게 ㅈㄴ 힘드네
1. org.springframework.core.AttributeAccessorSupport
- 필드변수 Map<String,Object> 객체가 있음
- 사실상 이 Map에 대한 setter(), getter(), remove(), hasAttr() 등을 수행
- 한마디로 속성에 대한 CRUD를 Map을 통해 처리하는 객체
- 자식 객체의 확장성을 위한 객체
2. org.springframework.beans.BeanMetadataAttributeAccessor
- 메타데이터 ? '데이터의 데이터'. 데이터 원본에 대한 summary 혹은 desc
- 1의 AttributeAccessorSupport 를 상속받아 확장한 객체
- 빈 설정에 대한 summary 데이터와 track을 보관하기 위한 객체
3. org.springframework.beans.factory.support.AbstractBeanDefinition
- 빈 객체의 공통적인 특성을 factoring 한 객체
- 빈의 scope, autowired, singleton 등.. 속성에 대한 CRUD
- constructor에서 BeanMetadataAttributeAccessor.setSource()를 호출하여, 설정 정보를 저장(그래서 상속했나봄)
- 자식 객체로 ChildBeanDefinition, GenericBeanDefinition, RootBeanDefinition이 있음
4. 하위 BeanDefiniton
- ChildBeanDefinition : 부모 빈 Definition 객체의 속성과 정보를 바탕으로 자식 빈 def 객체를 생성
- RootBeanDefinition : 각각 연관된 빈 def 객체의 속성을 통합하여 runtime시 factory 객체에 속성 정보를 전달하는 객체 (spring 2.5 후로는 GenericeBeanDefinition을 추천한다고 한다)
- GenericBeanDefinition : 빈 def 객체의 표준. 사용자가 원하는 설정을 가진 빈 def 객체를 생성하는 것은 물론, 부모 빈 def 객체를 지정하여 추가적인 설정도 가능하도록 만든 객체
- 여기까지 요약해보자면... xml로 부터 읽어온 빈의 대한 정의와 설정을 AbstractBeanDefinition 객체에 보관하여 관리
- 그 다음은? 빈 def 객체를 실제로 생성을 해야지
- 스프링은 주로 xml 설정이 대부분이니 아마 xml parsing하는 과정도 어딘가에 있지않을까?