-
스프링 컨테이너에 등록된 모든 빈 조회JAVA/Spring(Springboot) 2021. 7. 17. 15:10728x90
스프링 컨테이너에 등록된 모든 빈 및 사용자가 등록한 빈을 조회할 수 있다
우선 스프링 컨테이너를 생성해보자
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() : 빈 이름으로 빈 객체를 조회한다
728x90728x90'JAVA > Spring(Springboot)' 카테고리의 다른 글
[Spring] Bean을 생성하는 방법 (0) 2021.07.18 [Spring] Bean 객체 가져오기 (0) 2021.07.17 스프링 부트 사용해서 스프링 프로젝트 생성 (0) 2021.07.13 [JPA] JPA 사용하기 (0) 2021.07.11