스프링 핵심원리 기본편6 - 스프링 컨테이너 생성 & 컨테이너에 등록된 모든 빈 조회
본문 바로가기

TIL/스프링 핵심원리 - 기본편 with 인프런(김영한님)

스프링 핵심원리 기본편6 - 스프링 컨테이너 생성 & 컨테이너에 등록된 모든 빈 조회

반응형

안녕하세요 오늘도 강의를 들으며 공부한 내용을 정리해 보겠습니다.

 

먼저 스프링 컨테이너는 ApplicationContext를 스프링 컨테이너 라고 합니다.

 

1
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 
cs

 

위 소스와 같이 스프링 컨테이너를 생성해 줍니다.

 

스프링 컨테이너는 XML기반으로도 만들 수 있고 위의 코드 같이 애노테이션 기반의 자바 설정 클래스로도 만들 수 있습니다.

* 더 정확히는 스프링컨테이너를 부를 때 BeanFactory와 ApplicationContext로 구분해서 이야기합니다. 하지만

BeanFactory를 직접 사용하는 경우는 거의 없으므로 ApplicationContext를 스프링 컨테이너라고 한다고 합니다.

 

스프링 컨테이너를 생성하면 스프링 빈 저장소가 생기게 됩니다.

 

이때 스프링 빈 저장소의 키는 빈의 이름이 되고 값은 빈의 객체가 됩니다.

 

빈의 이름은 AppConfig의 메서드의 이름을 디폴트로 사용하지만 직접 부여 할수도 있습니다.

빈 객체는 반환하는 객체가 등록이 됩니다.

*빈의 이름은 항상 다른 이름으로 부여 하야여 합니다. 아니면 오류가 많이 발생합니다.

 

스프링 컨테이너는 설정 정보를 참고하여 의존관계를 주입힙니다.

 

이제는 컨테이너에 등록된 빈들이 잘 등록이 된건지 확인을 해보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
        }
    }
}
 
cs

 

위와 같은 코드를 짜서 확인이 가능합니다.

위치는 스크립트가 아닌 테스트 쪽에 만들어 주었습니다.

 

 

실행시켜주면 위와 같이 등록된 모든 bean의 이름을 확인할수 있습니다. 

위에 org.으로 시작하는 것들은 스프링 내부에서 자체를 확장하기 위해서 쓰는 기반 빈들이고 그 아래 있는 것들이 제가 등록한 빈들입니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    @Test
    @DisplayName("애플리케이션 빈 출력하기")
    void findApplicationBean() {
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        
        for(String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
            
            //Role_Applicaion : 직접 등록한 애플리케이션 빈
            //ROle_INFRASTRUCTURE : 스프링 내부에서 사용하는 빈
            if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
                Object bean = ac.getBean(beanDefinitionName);
                System.out.println("name = " + beanDefinition + " object = " + bean);
            }
                
        }
    }
cs

 

내가 생성한 빈만을 보고 싶을때는 이렇게 작성해 주시면 됩니다.

감사합니다. 다음 강의도 요약해서 올려보도록 하겠습니다.

반응형