본문 바로가기
Develop/Spring (실습)

Spring Basic ( 컨테이너 구동원리 / 스프링 Bean 파보기 )

by 보보트레인 2023. 8. 7.

 

//스프링 컨테이너 생성
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 실행 결과 시. 

내가 등록한 스프링 빈 확인 가능하다.

반응형