당니의 개발자 스토리
컨테이너에 등록된 모든 빈 조회 본문
컨테이너에 등록된 모든 빈 조회
이번 시간에는 이 컨테이너에 등록한 빈들이 제대로 등록이 됐는지 확인을 해볼게요.

분명히 뭔가 등록을 한 것 같긴 한데.. @Bean 하면 자동으로 등록이 되어버리니까 확인을 하고 싶은거죠.
테스트 코드로 한번 짜볼게요.

test 폴더에 hello.core에다가 beanfind 라는 패키지를 만들겠습니다. 빈을 찾겠다는 의미입니다.
그리고나서,

스프링 컨테이너에 있는 빈을 조회하는 ApplicationContextInfoTest 라는 클래스를 만들겠습니다.

그리고 ac라는 스프링 컨테이너를 만들어주고요. 이 스프링 컨테이너는 AppConfig 설정 정보를 보고 빈을 등록하겠죠.
그리고 나서,

이렇게 하고 모든 빈을 출력해보겠습니다.

JUnit 5부터는 public으로 설정 안해도 됩니다.

그리고 getBeanDefinitionNames() 으로 컨테이너에 등록한 bean의 이름을 배열을 반환해서, 빈의 이름들을 꺼낼 수 있습니다.
배열 beanDefinitionNames에다가 빈으로 정의된 이름을 다 등록하고요. 그 다음에

iter 적고 tab 하면,

이렇게 됩니다. 리스트나 배열이 있으면 iterator 라고 해서, iter 적고 tab 하면, for 문이 자동으로 완성됩니다.
그 다음에

ac에서 bean을 꺼내는데, Object가 꺼내져요. 왜냐면, type을 지정하지 않았기 때문입니다.
그 다음에 soutv 해서 찍어줄 겁니다.

beanDefinitionName이 Key고, bean이 Value 입니다. 돌려보겠습니다.
자 이러면 스프링 컨테이너에 있는 모든 빈을 다 가져오는 겁니다.
모든 빈이 출력된 결과를 보면,

이거는 스프링이 내부적으로 스프링 자체를 확장하기 위해서 쓰는 기반 빈들이에요. 그리고 아래를 보시면,

AppConfig도 스프링 빈으로 등록되고, 나머지 4개도 스프링 빈으로 등록된 걸 로그로 확인할 수 있습니다.
자 그런데 이런식으로 섞여서 로그가 보이면, '아.. 내가 등록한 거나, 내가 짠 코드만 보고 싶은데..' 스프링 내부에 있는 것은 좀 빼고 싶겠죠. 그래서 애플리케이션 빈 이라는 것만 한번 출력을 해볼게요.
메서드를 똑같이 복사하겠습니다. 복사 키는 cmd + d 입니다.

DisplayName을 애플리케이션 빈 출력하기 라고 바꿉니다. 스프링 내부적으로 등록한 빈 말고, 우리가 만든 애플리케이션 스프링 빈들만 보여줄 거에요. 그래서 메서드 이름도 findApplicationBean으로 바꿔줍니다.
iterator 사용해서 for문을 생성한 것까지는 똑같고,

beanDefinitionName을 찾은 다음에 ac에서 뭘 꺼내야 되냐면, getBeanDefinition() 이라는 게 있습니다. getBeanDefinition은 빈 하나하나에 대한 메타데이터 정보고요, 그 정보를 beanDefinitionName을 파라미터로 넣으면 꺼낼 수가 있습니다.

그 다음에 getRole() 이라는 게 있어요.

주로 쓰는게 ROLE_APPLICATION 입니다.

ROLE_APPLICATION는 스프링 내부에서 뭔가를 하기 위해서 등록한 빈들이 아니라, 주로 내가 애플리케이션을 개발하기 위해서 등록한 빈들이라고 보시면 됩니다. 아니면 외부 라이브러리나 이런 것들이죠.
자 그래서 이 경우에만 출력을 하게 하는 거에요.

이렇게 하고 돌려보면, 우리가 등록한 애플리케이션 빈 다섯 개만 출력이 될거예요.
기존에는

이렇게 다 떴었는데 이제는

이렇게 5개만 나옵니다. AppConfig도 우리가 만든 거니까 같이 뜨겠죠. 옆에 어떤 객체를 빈으로 생성했는지 함께 나와있습니다.
이번엔 ROLE_INFRASTRUCTURE로 바꿔서 출력해보겠습니다.

얘네는 스프링이 스프링 컨테이너 내부에서 사용하는 빈들이에요. 다시 원래대로 고쳐줍니다.
그래서 정리를 해보면,

실행하면 Spring에 등록된 모든 빈들의 정보를 출력할 수 있고요.
ac.getBeanDefinitionNames() 하면 스프링에 등록된 모든 빈들의 이름을 조회하고, ac.getBean()하면, 스프링 컨테이너에서 빈을 찾아오는 겁니다.
그리고 출력하기도 헤봤습니다. 그런데 실제로는 이렇게 다 출력할 일이 없겠죠.
다음 시간에는 Spring Bean을 조회하는 가장 기본적인 동작부터 어떻게 하는지 하나씩 살펴보겠습니다.
'스프링 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
| 스프링 빈 조회 - 동일한 타입이 둘 이상 (0) | 2024.01.21 |
|---|---|
| 스프링 빈 조회 - 기본 (0) | 2024.01.20 |
| 스프링 컨테이너 생성 (0) | 2024.01.20 |
| 스프링으로 전환하기 (0) | 2024.01.19 |
| IoC, DI, 그리고 컨테이너 (0) | 2024.01.19 |