기본 _ Ch. 4

yuKeon·2022년 11월 8일
0

Spring_Core

목록 보기
4/8
post-thumbnail

1. 스프링 컨테이너

  • ApplicationContext(인터페이스) == 스프링 컨테이너

스프링 컨테이너 생성 과정

  • new AnnotationConfigApplicationContext(AppConfig.class); 선언 시 생성
  • AppConfig.class → 구성 정보

2. 스프링 빈

스프링 빈 등록

  • 스프링 컨테이너는 파라미터로 들어온 설정 클래스(AppConfig.class)를 통해 스프링 빈을 등록

스프링 빈 의존관계 설정

  • 스프링 컨테이너는 설정 정보를 참고해 의존관계를 주입 → DI

3. 빈 조회

ac.getBean(빈이름(공백 가능), 타입) → 가장 기본적인 방법

@Test
@DisplayName("빈 이름으로 조회")
      void findBeanByName() {
          MemberService memberService = ac.getBean("memberService",
  MemberService.class);
          assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}

ac.getBeanDefinitionNames() → 모든 빈 출력

@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.getBeansOfType() → 해당 타입의 모든 빈 출력

@Test
    @DisplayName("특정 타입을 모두 조회하기")
    void findAllBeanByType(){
        Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class);
        for (String key : beansOfType.keySet()) {
            System.out.println("key = " + key + " value " + beansOfType.get(key));
            org.assertj.core.api.Assertions.assertThat(beansOfType.size()).isEqualTo(2);
        }
    }
  • 같은 타입이 둘 이상이면 빈 이름을 지정 ex) ac.getBean("memberRepository1", MemberRepository.class);

상속관계

  • 부모 타입을 조회하면 자식도 함께 조회

4. BeanFactory와 ApplicationContext


BeanFactory

  • 스프링 컨테이너 최상의 인터페이스
  • 빈 관리 및 조회 ex) getBean()

ApplicationContext

  • BeanFactory 기능을 상속받아서 제공한다.
  • 빈 관리기능 + 편리한 부가 기능을 제공
  • BeanFactory, ApplicationContext 모두 스프링 컨테이너

0개의 댓글