카테고리 없음

[스프링부트] 컨테이너 빈 조회하기

딤섬뮨 2022. 6. 1. 10:41
728x90
  • 스프링 컨테이너와 스프링 빈

1. 스프링 컨테이너 생성

AppliationContext는 인터페이스이다.이걸 컨테이너라고 보통 부른다

 

AnnotationConfigApplicationContext는 AppliationContext의 구현체이다.

스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보(AppConfig)를 사용해서 스프링 빈을 등록한다.

new AnnotationConfigApplicationContext(AppConfig.class)

 

2. 스프링 빈 등록

스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 이용해 스프링 빈을 등록한다.

 

스프링 빈은 @Bean이 붙은 메소드의 명을 스프링 빈의 이름으로 사용한다.

빈 이름은 항상 다른 이름을 부여하자.

스프링 빈을 찾을땐 applicaitonContext.getBean()

 

3. 스프링 의존 관계 설정

4. 컨테이너에 등록된 모든 빈 조회

 

<단축키>

for 문을 자동으로 만들어줌 : iter + tab 

변수 자동 추출 : ctrl+alt+v

 

 

모든 빈 출력하는 코드는 다음과 같다.

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);
        }
    }
}

실행 화면

모든 빈 중에 사용하는 빈만 출력하고 싶으면 다음과 같이 쓴다.

getBeanDefinitionNames를 추출한뒤 그 안에서 Role이 ROLE_APPLICATION인것을 추출하면 된다.

@Test
    @DisplayName("사용하는 빈 출력하기")
    void findApplictationBean() {
        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);
            }

        }

 

728x90