Heestory

04.스프링)스프링 컨테이너와 스프링 빈 본문

개발(~국비)/Spring

04.스프링)스프링 컨테이너와 스프링 빈

까만밀가루 2022. 10. 22. 22:17

스프링 컨테이너 생성

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

- ApplicationContext : 스프링 컨테이너, 인터페이스

  • 스프링 컨테이너 : XML 기반, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다(스프링이 유연하게 설정가능)

- AnnotationConfigApplicationContext(AppConfig.class); : ApplicationContext 인터페이스 구현체

  • 구성 정보를 AppConfig.class에 지정
    @Test
    @DisplayName("애플리케이션 빈 출력하기")
    void findApplicationBean(){
        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);

        }
    }

 

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

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

- 스프링이 내부에서 사용하는 빈은 getRole()로 구분 가능

  • ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
  • ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
    @Test
    @DisplayName("빈 이름 조회")
    void findBeanByName(){
        MemberService memberService = ac.getBean("memberService", MemberService.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
    }

 

- isInstanceOf : 어떤 클래스로부터 생성되었는지

memberService.getClass() → memberServiceImpl 

:memberService 내 생성된 구현 객체 타입이 누구인지?

 

 

스프링 빈 조회 - 상속관계

  • 부모 타입으로 조회하면, 자식 타입도 함께 조회한다.
  • 자바 객체의 최고 부모인 Object 타입으로 조회하면 모든 스프링 빈을 조회한다

 

BeanFactory와 ApplicationContext → 스프링 컨테이너

-BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회하는 역할을 담당
  • getBean()을 제공

-ApplicationContext

  • BeanFactory 기능을 모두 상속받아서 제공
  • 메시지 소스를 활용한 국제화 기능 : 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로
  • 환경 변수 : 로컬,개발,운영 등을 구분해서 처리
  • 애플리케이션 이벤트 : 이벤트를 발행하고 구독하는 모델을 편리하게 지원
  • 편리한 리소스 조회 : 파일,클래스패스, 외부 등에서 리소스를 편리하게 조회

 

BeanDefinition

:스프링 빈 설정 메타 정보를 추상화

 


본 내용은 인프런 - 김영한 스프링 기본편 강의 내용 정리용으로 작성하였습니다

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8