Spring은 어떻게 다양한 설정 형식을 지원할까?
바로 BeanDefinition이라는 추상화 때문에 다행이다.
역할과 구현을 개념적으로 나누어서 가능하다.
BeanDefinition은 속성 값, 생성자 인수 값 및 구체적인 구현에서 제공하는 추가 정보가 있는 빈 인스턴스를 말한다.
BeanDefinition은 추상화이기 때문에 최소한의 인터페이스 이며 BeanFactoryPostProcessor속성 값과 기타 빈 메타데이터를 검사하고 수정할 수 있도록 하는 것이다.
BeanDefinition에는 많은 옵션들이 있다.
IoC Container의 BeanDefinition이 등록될 때 꼭 필요한 것은 beanClassName이다.
어떤 코드인지 어떤 구성으로 되어있는지 보다는 Spring Container는 오직 BeanDefinition의 beanClassName만 알면된다.
그렇기 때문에 BeanDefinition을 빈 설정 메타정보라 칭하며 보통 @Bean, <bean>등등 각각 하나씩 메타 정보가 생성된다.
그리고 Spirng Container는 이렇게 읽어들인 메타정보를 기반으로 SpringBean을 생성한다.
beanClassName을 통해 무엇을 반환하는지 확인도 가능하다.
BeanDefinition의 Method
getScope | 해당 bean에 대한 현재 대상 범위의 이름을 반환(null포함) |
setBeanClassName | Bean정의의 Bean Class이름을 지정한다. |
getBeanClassName | 해당 bean의 클래스 이름을 반환한다. 자식 class인 경우 사용되는 실제 클래스 이름을 사용할 필요는 없으며, 조회용으로만 사용하는 것이 좋다. |
setScope | Bean의 대상 범위를 지정할 수 있다. |
getScope | 해당 Bean에 현재 대상 범위의 이름을 반환한다.(null포함) |
setLazyInit | boolean Type으로해당 Bean을 느리게 초기화할지 여부를 설정한다. false일경우 시작시 싱글톤의 빈 팩토리에 의해 인스턴스화 된다. |
isLazyint | boolean Type으로 bean이 느리게 초기화 되어야 하는지 여부를 반환한다. 그로인해 동작시 바로 인스턴스화가 되지 않는다. 싱글톤 빈에만 적용가능하다. |
getDependsOn | 해당 bean이 의존하고 있는 bean의 이름을 반환한다. |
isPrimary | boolean Type으로 해당 bean이 기본 autowire인지 여부를 반환한다. |
getFactoryBeanName | FactoryBeanName이 존재한다면 이름을 반환한다. |
getFactoryMethodName | FactoryMethodName, 메서드는 지정된 팩토리 빈이 있는 경우 호출 되거나 그렇지 않다면 bean 클래스의 정적 메서드가 호출된다. |
Contructor arguments, Properties | 의존관계 주입에사용 |
DestroyMethodName | 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 |
InitMethodName | 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 |
'FrameWork > Spring' 카테고리의 다른 글
웹 애플리케이션과 싱글톤 (0) | 2023.07.19 |
---|---|
@RequiredArgsConstructor (0) | 2023.07.16 |
JPA (작성중) (0) | 2023.07.12 |
Spring Framework에 대해 정리해보기 (1) | 2023.07.11 |
관심사 분리 (0) | 2023.07.10 |
댓글