ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 컨테이너에 등록된 모든 빈 조회
    JAVA/Spring(Springboot) 2021. 7. 17. 15:10
    728x90
    728x90

    스프링 컨테이너에 등록된 모든 빈 및 사용자가 등록한 빈을 조회할 수 있다

     

     

    우선 스프링 컨테이너를 생성해보자

    AnnotationConfigApplicationContext ac
    	= new AnnotationConfigApplicationContext(AppConfig.class);

     

     

    스프링 컨테이너에 등록된 모든 빈 출력

    스프링 컨테이너에 등록된 모든 빈을 출력해보겠다

    AppConfig에서 등록된 빈뿐만 아니라 스프링에서 기본으로 저장되어 있는 빈 객체도 있다

    @Test
    @DisplayName("모든 빈 출력하기")
    void findAllBean() {
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for(name : beanDefinitionNames) {
            Object bean = ac.getBean(name);
            System.out.println("name : " + name + ", object : " + bean);
        }
    }

     

    ac.getBeanDefinitionNames() 를 하면 스프링 컨테이너에 등록된 모든 빈 객체의 이름을 가지고 올 수 있다

     

     

    사용자가 등록한 빈 출력
    @Test
    @DisplayName("애플리케이션 출력하기")
    void findApplicationBean() {
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for (String name : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(name);
            if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
                Object bean = ac.getBean(name);
                System.out.println("name : " +  name + ", object : " + bean);
            }
        }
    }

    모든 빈을 찾는 과정과 BeanDefinitionNames 를 들고오는 것은 똑같으나

    이 중에서 Application 에 사용하는 것만 들고와야하기 때문에

    ac.getBeanDefinition(name) 으로 BeanDefinition 객체를 가져온다

     

    BeanDefinition 객체의 getRole()이 BeanDefinition.ROLE_APPLICATION 이면 조건을 만족한다

    - ROLE_APPLICATION : 사용자가 정의한 빈

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

     

     

    • ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회한다
    • ac.getBean() : 빈 이름으로 빈 객체를 조회한다
    728x90
    728x90
Designed by Tistory.