Develop/Spring (실습)
Spring Basic ( 컨테이너 구동원리 / 스프링 Bean 파보기 )
보보트레인
2023. 8. 7. 11:55
//스프링 컨테이너 생성
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
- ApplicationContext` 를 스프링 컨테이너라 한다.
- `ApplicationContext` 는 인터페이스이다.
- 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.
//스프링 컨테이너 생성과정
//스프링 빈 등록
//컨테이너에 등록된 모든 빈 조회
//스프링 컨테이너에 실제 스프링 빈들이 잘 등록 되었는지 확인해보자.
package hello.core.beanfind;
import hello.core.AppConfig;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
class ApplicationContextInfoTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {
//alt + enter
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
//iter + tab 하면 for문 자동완성
for (String beanDefinitionName : beanDefinitionNames) {
//alt + enter 하면 object가 나옴 -> 타입을 지정하지 않았기 때문에
Object bean = ac.getBean(beanDefinitionName);
System.out.println("Name = " + beanDefinitionName + " object = " + bean);
}
}
@Test
@DisplayName("애플리케이션 빈 출력하기")
void findApplicationBean() {
//alt + enter
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
//iter + tab 하면 for문 자동완성
for (String beanDefinitionName : beanDefinitionNames) {
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
//Role ROLE_APPLICATION : 직접 등록한 애플리케이션 빈
//Role ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
if (beanDefinition.getRole() == BeanDefinition.ROLE_INFRASTRUCTURE ){
Object bean = ac.getBean(beanDefinitionName);
System.out.println("Name = " + beanDefinitionName + " object = " + bean);
}
}
}
}
<설명>
예를들어 애플리케이션 빈 TDD 실행 결과 시.
내가 등록한 스프링 빈 확인 가능하다.
반응형