본문 바로가기
스프링 핵심원리 - 기본편

스프링 컨테이너와 스프링 빈

by leko 2023. 5. 10.

1. 스프링 컨테이너 생성

ApplicationContext  :  스프링 컨테이너, 인터페이스 , XML을 기반이나 애노테이션 기반의 자바 설정 클래스 (AppConfig 를 사용했던 방식)로 만들 수 있다.

스프링 컨테이너는 자세하게 BeanFactory , ApplicationContext(대분분 사용) 로 구분

자바 설정 클래스를 기반으로 스프링 컨테이너( ApplicationContext )

//스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다. -> AppConfig.class 를 구성 정보로 지정했다

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

 

빈 이름 : 매서드 이름을 사용. 빈 이름을 직접 부여할 수 도 @Bean(name="memberService2")

빈 이름은 항상 다른 이름을 부여해야 함.

 

스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.

 

스프링 컨테이너를 생성하고, 설정(구성) 정보를 참고해서 스프링 빈도 등록하고, 의존관계도 설정했다.

이제 스프링 컨테이너에서 데이터를 조회해보자

 

public class ApplicationContextinfoTest {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

    @Test
    @DisplayName("모든 빈 출력하기")
    void findAllBean(){
    	//ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회한다
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for(String beanDefinitionName : beanDefinitionNames)
        {
        	//ac.getBean() : 빈 이름으로 빈 객체(인스턴스)를 조회한다.
            Object bean = ac.getBean(beanDefinitionName); 
            System.out.println("name = " + beanDefinitionName + " object = " + bean);

        }
    }

    @Test
    @DisplayName("application 빈 출력하기")
    void findApplicationBean(){
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for(String beanDefinitionName : beanDefinitionNames)
        {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
            
            //ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
            if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION)
            {
                Object bean = ac.getBean(beanDefinitionName);
                System.out.println("name = "+beanDefinitionName + " object = " + bean);
            }
        }
    }
}

 

스프링에 등록된 모든 빈 정보를 출력

 

 

 

 

 

 

 

 

 

 

 

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

 

3. 스프링 빈 조회 - 기본

 

4. 스프링 빈 조회 - 동일한 타입이 둘이상

 

5. 스프링 빈 조회- 상속 관계

 

6. BeanFactory와 ApplicationContext 

 

7. 다양한 설정 형식 지원 -자바코드 , XML

 

8. 스프링 빈 설정 메타 정보 - BeanDefinition