🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard
✨ BeanDefinition
✅ BeanDefinition : Bean 정보에 대한 추상화 (Bean 설정 메타 정보)
》@Bean, <bean> 당 각각 하나의 메타 정보 생성
BeanDefinition 정보 | 설명 |
BeanClassName | 생성할 빈의 클래스명 (자바 설정처럼 팩토리 역할의 빈 사용 시에는 없음) |
FactoryBeanName | 팩토리 역할의 빈을 사용할 경우 이름 (ex. appConfig) |
FactoryMethodName | 빈을 생성할 팩토리 메서드 지정 (ex. memberService) |
Scope | 싱글톤 - 기본값 |
LazyInit | 스프링 컨테이너 생성 시, 실제 빈을 사용할 때까지 빈의 생성을 최대한 지연 처리하는지 여부 |
InitMethodName | 빈 생성 & 의존 관계 적용 후 호출되는 초기화 메서드명 |
DestroyMethodName | 빈의 생명 주기가 끝나 제거되기 직전 호출되는 메서드명 |
Constructor arguments, Properties | 의존 관계 주입 시 사용 (자바 설정처럼 팩토리 역할의 빈 사용 시에는 없음) |
☑️ 스프링 컨테이너는 메타 정보를 기반으로 스프링 빈 생성
☑️ 코드 레벨로 확장
· AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitonReader 를 사용해 AppConfig.class 를 읽고, BeanDefinition 생성
· 새로운 형식의 설정 정보가 추가될 시, ~BeanDefinitionReader 를 만들어 BeanDefinition 생성
✨ 빈 설정 메타 정보 확인하기
1. test/java/hello.core/beandefinition Package 생성
2. test/java/hello.core/beandefinition/BeanDefinitionTest Class 생성
public class BeanDefinitionTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("빈 설정 메타 정보 확인")
void findApplicationBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
System.out.println("beanDefinitionName = " + beanDefinitionName +
" beanDefinition = " + beanDefinition);
}
}
}
}
정리
- BeanDefinition 을 직접 생성하여 스프링 컨테이너에 등록할 수 있지만, 실무에서는 거의 사용하지 않는다
- BeanDefinition 에 대한 깊은 이해보다는, 스프링이 다양한 형태의 설정 정보를 BeanDefinition 으로 추상화하여 사용한다는 정도로만 이해하자
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[싱글톤 컨테이너] 싱글톤 방식의 주의점 - 무상태(stateless) 설계 (0) | 2023.11.30 |
---|---|
[싱글톤 컨테이너] 싱글톤 패턴의 문제를 해결하는 스프링 컨테이너 (0) | 2023.11.29 |
[스프링 컨테이너와 스프링 빈] 다양한 설정 형식 지원 - 자바 코드, XML (0) | 2023.11.24 |
[스프링 컨테이너와 스프링 빈] BeanFactory 와 ApplicationContext (0) | 2023.11.23 |
[스프링 컨테이너와 스프링 빈] 스프링 빈 조회 - 기본, 동일한 타입이 둘 이상, 상속 관계 (0) | 2023.11.22 |