ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컨테이너에 등록된 모든 빈 조회
    FrameWork/Spring&Spring-boot 2022. 1. 1. 11:42

    개발 팁

    -Junit5 부터는 class 앞에 public 표시 안해도 된다.

    -iter+Tab ->향상된 for문 자동완성

    -soutm -> 메서드 문을 찍어준다

    -soutv -> 변수명 찍어준다.


     

    -스프링 컨테이너에 실제 스프링 빈들이 잘 등록 되었는지 확인해보자

     

    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;
    
    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);
                if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
                    Object bean = ac.getBean(beanDefinitionName);
                    System.out.println("name ="+beanDefinitionName + "object +"+bean);
    
                }
    
            }
        }
    }
    

     

    @Test 모든 빈 출력하기

    • 실행하면 스프링에 등록된 모든 빈 정보를 출력할 수 있다.
    • 'ac.getBeanDefinitionNames( )':스프링에 등록된 모든 빈 이름을 조회한다.
    String[] beanDefinitionNames = ac.getBeanDefinitionNames();
    • 'ac.getBean( )':빈 이름으로 빈 객체(인스턴스)를 조회한다.
    Object bean = ac.getBean(beanDefinitionName);

    ->꺼내 질 Bean 객체의 type을 정하지 않았기 때문에 Object로 꺼내진다.

     

     

     

     

    @Test 어플리케이션 빈 출력하기

    • 스프링이 내부에서 사용하는 빈은 제외하고, 내가 등록한 빈만 출력해 보자
    • 스프링 내부에서 사용하는 빈은 'getRole'로 구분할 수 있다.
    BeanDefinition.ROLE_APPLICATION
    BeanDefinition.ROLE_INFRASTRUCTURE

    -ROLE_APPLICATION : 직접 등록한 애플리케이션 빈

    -ROLE_INFRASTRUCTURE  : 스프링이 내부에서 사용하는 빈

    BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

    ->Bean하나하나에 대한 meta데이터 정보들을 꺼 낼 수 있다.

     

    [출처 : 김영한. 스프링 핵심 원리-기본편. 인프런]

     

    댓글

Designed by Tistory.