Spring Framework

스프링(1) - Bean Definition

다미르 2019. 3. 21. 14:36

스프링(1) - Bean Definition


사실 스프링 자체를 공부한다기 보다는 진행하는 스터디에서 프레임워크 작업을 하다보니 

디자인, 프로토타입 등 클래스 설계에 대한 지식이 부족하다고 느껴서...

이럴 땐 나보다 잘하는 누군가 써놓은 좋은 코드로 공부를 좀 해봐야겠다 싶어서 시작하는 스프링 탐색하기

다 볼 생각은 없고, bean 훓고 궁금한 것 좀 까보다가 social login 이 최종 목표!


 

스프링 Bean 이란?

 

- 사실 그냥 JAVA의 객체.   

- 왜 그럼 이름이? 스프링의 특징을 생각해보자. IOC, DI의 특징을 가지는 스프링 컨테이너가 관리하는 객체기에  

  특별히 '스프링 빈'이라고 부르는 것

- UML 부터 보자

 

 

- 아 블로그 처음하다보니 레이아웃 잡는게 ㅈㄴ 힘드네

 

1. org.springframework.core.AttributeAccessorSupport

  1. 필드변수 Map<String,Object> 객체가 있음
  2. 사실상 이 Map에 대한 setter(), getter(), remove(), hasAttr() 등을 수행
  3. 한마디로 속성에 대한 CRUD를 Map을 통해 처리하는 객체
  4. 자식 객체의 확장성을 위한 객체

 

 

2. org.springframework.beans.BeanMetadataAttributeAccessor

  1. 메타데이터 ? '데이터의 데이터'. 데이터 원본에 대한 summary 혹은 desc
  2. 1의 AttributeAccessorSupport 를 상속받아 확장한 객체
  3. 빈 설정에 대한 summary 데이터와 track을 보관하기 위한 객체


3. org.springframework.beans.factory.support.AbstractBeanDefinition

  1. 빈 객체의 공통적인 특성을 factoring 한 객체
  2. 빈의 scope, autowired, singleton 등.. 속성에 대한 CRUD
  3. constructor에서 BeanMetadataAttributeAccessor.setSource()를 호출하여, 설정 정보를 저장(그래서 상속했나봄)
  4. 자식 객체로 ChildBeanDefinition, GenericBeanDefinition, RootBeanDefinition이 있음

 

4. 하위 BeanDefiniton 

  1. ChildBeanDefinition : 부모 빈 Definition 객체의 속성과 정보를 바탕으로 자식 빈 def 객체를 생성
  2. RootBeanDefinition : 각각 연관된 빈 def 객체의 속성을 통합하여 runtime시 factory 객체에 속성 정보를 전달하는 객체  (spring 2.5 후로는 GenericeBeanDefinition을 추천한다고 한다)
  3. GenericBeanDefinition : 빈 def 객체의 표준. 사용자가 원하는 설정을 가진 빈 def 객체를 생성하는 것은 물론, 부모 빈 def 객체를 지정하여 추가적인 설정도 가능하도록 만든 객체

 

- 여기까지 요약해보자면... xml로 부터 읽어온 빈의 대한 정의와 설정을 AbstractBeanDefinition 객체에 보관하여 관리

- 그 다음은? 빈 def 객체를 실제로 생성을 해야지

- 스프링은 주로 xml 설정이 대부분이니 아마 xml parsing하는 과정도 어딘가에 있지않을까?