WIL

26주차 - 컨테이너에 등록된 모든 빈 조회

haedal-uni 2022. 3. 13. 22:13
728x90

컨테이너에 등록된 모든 빈 조회 [#13] #15

 


 

* junit5부터는 public 설정을 안해도 된다. (3개 예시 중 아무거나 써도 상관 없다.)

public class ApplicationContextInfoTest {
    void findAllBean() {  
    }  
}

 

public class ApplicationContextInfoTest {
    public void findAllBean() {      
    }    
}

 

class ApplicationContextInfoTest {
    void findAllBean() {       
    }
}

 


 

@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {

    // 정의된 이름을 등록
    String[] beanDefinitionNames = ac.getBeanDefinitionNames(); 

    // iter + tab → for 문 자동 완성
    for (String beanDefinitionName : beanDefinitionNames) {

        // key 값
        Object bean = ac.getBean(beanDefinitionName);

        // value 값
        System.out.println("name = " + beanDefinitionName + " object = " + bean); 
    }
    
    
}

 

 

bean 정의된 이름을 등록한다. ( * 단축키 : ctrl + alt + v )

String[] beanDefinitionNames = ac.getBeanDefinitionNames();

 

 

 

* iter 을 입력한 후 tab 키를 누르면 for문이 자동완성 된다.

for (String beanDefinitionName : beanDefinitionNames) {
}

 

 

 

key 값( * 단축키 : ctrl + alt + v )

Object bean = ac.getBean(beanDefinitionName);

타입 지정을 안해서 Object가 뜬다

 

 

 

value 값 (* 단축키 : soutv ➡️ 변수 명 print 한다. )

System.out.println("name = " + beanDefinitionName + " object = " + bean);

 

 

 

 

실행 결과

 

4개가 진짜 등록한 것들 //  appConfig를 제외한 그 위쪽은 스프링 자체를 확장하기 위해 만든 bean

 

→ 스프링에 등록된 모든 빈 정보를 출력할 수 있다.

 

 

ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회한다.

ac.getBean() : 빈 이름으로 빈 객체(인스턴스)를 조회한다.

 


 

내가 작성한 코드만 보고 싶으면?

 

스프링이 내부에서 사용하는 빈은 제외하고, 내가 등록한 빈만 출력하기

@Test
@DisplayName("애플리케이션 빈 출력하기")
void findApplicationBean() {
    String[] beanDefinitionNames = ac.getBeanDefinitionNames(); 
    for (String beanDefinitionName : beanDefinitionNames) {

        // getBeanDefinition : bean에 대한 정보들
        BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

        // getRole() : application을 등록하기 위해 개발한 bean or 외부 라이브러리
        if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
        
            Object bean = ac.getBean(beanDefinitionName); 
            System.out.println("name = " + beanDefinitionName + " object = " + bean); 
        }

    }
}

 

 

getBeanDefinition : bean에 대한 정보들

BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

 

 

 

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

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

if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
}

getRole() : application을 등록하기 위해 개발한 bean or 외부 라이브러리

스프링이 내부에서 사용하는 빈은 getRole() 로 구분할 수 있다.

 

 

 

실행 결과

 

appConfig를 포함한 총 5개만 출력이 된다.

 

 

728x90

'WIL' 카테고리의 다른 글

28주차  (0) 2022.03.27
27주차 - 스터디(BeanDefinition , 싱글톤)  (0) 2022.03.20
25주차  (0) 2022.03.06
24주차 - commit 기록 지우기  (0) 2022.02.27
23주차 - 생성자  (0) 2022.02.20