스프링 컨테이너와 스프링 빈
스프링 컨테이너 생성
주의: 빈 이름은 항상 다른 이름을 부여해야 한다. 같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
컨테이너에 등록된 모든 빈 조회 TEST - beanfind package 참고
public class ApplicationContextInfoTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name = " + beanDefinitionName + "object = " + bean);
}
}
@Test
@DisplayName("애플리케이션 빈 출력하기")
void findApplicationBean() {
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
//ROLE_APPLICATION : 직접 등록한 애플리케이션 빈
//ROLE_INFRASTRUCTURE: 스프링이 내부에서 사용하는 빈
if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
Object bean = ac.getBean(beanDefinitionName);
System.out.println("name = " + beanDefinitionName + "object = " + bean);
}
}
}
스프링 빈 조회 (기본, 동일한 타입이 둘 이상, 상속 관계) TEST - beanfind package 참고
BeanFactory와 ApplicationContext
다양한 설정 형식 지원 - 자바 코드, XML <- resources - appConfig.xml
스프링 빈 설정 메타 정보 - BeanDefinition (역할과 구현 개념적으로 나눈 것)
BeanDefinition
을 빈 설정 메타정보라 한다.