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

스프링 핵심원리 기본편 - 스프링 컨테이너와 스프링 빈

by latissimus 2022. 9. 2.

인프런 김영한님의 스프링 핵심원리 - 기본편을 학습하고 정리한 내용입니다. 학습 목적의 정리이며 모든 강의 내용을 정리하진 않습니다. 틀린 부분 지적해주시면 감사하겠습니다.

 

 

스프링으로 전환

ApplicationContext에서 (@Configuration이 적힌) 구성정보 활용하여 컨테이너 생성

  • @Configuration : 해당 어노테이션을 달아주면 해당 구성 정보를 사용한다. 해당 강의에서는 AppConfig에 달아줬다.
  • @Bean 이 표시된 메서드들을 모두 호출해서 반환된 객체들을 스프링 컨테이너에 등록
  • getBean으로 꺼내와서 Service를 사용한다.

 

스프링 컨테이너

ApplicationContext를 보통 스프링 컨테이너라고 한다. BeanFactory는 그 위에 최상위 클래스인데, 사실 직접 사용하는 경우가 거의 없으므로 ApplicationContext가 스프링 컨테이너라고 이해하면 된다.

 

요약하면 BeanFactory는 getBean()을 제공한다. ApplicationContext는 거기에 편리한 부가기능을 제공한다.

 

즉, ApplicationContext 빈 관리기능 + 편리한 부가기능을 가졌고, 부가기능은 주로 메시지소스를 활용한 국제화, 환경변수, 애플리케이션 이벤트, 편리한 리소스 조회가 있다.

 

ApplicationContext도 인터페이스이다. 다음과 같이 구성정보와 함께 지정하여 스프링 컨테이너를 생성한다.

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
  • 컨테이너 내부에 빈 저장소가 존재하는데, 구성정보를 활용해 스프링 빈을 등록한다
  • 참고로 빈 생성과 의존관계 주입이 분리되어 진행된다.

 

Bean의 조회

  • 빈의 이름은 항상 다른 이름으로 부여하자. 겹치면 덮어씌워지거나, 경고를 받는다. 이름변경도 가능하지만 웬만하면 default를 사용하자.
  • ac.getBean(빈 이름, 타입)
    • 구체적인 클래스를 타입으로 지정 가능(불가피할때 사용)
  • 조회 대상 빈이 없다면?
    • NoSuchBeanDefinitionException 발생
  • ac.getBean(타입)
    • 타입만 입력하기때문에, 같은 타입이 여러 개 존재할 경우 문제  -> NoUniqueBeanDefinitionException 발생
  • 상속 관계
    • 부모 조회 시 자식 타입도 줄줄이 조회된다.
    • Object로 조회 시 모든 스프링 빈 조회
  •  getBeansOfType()
    • 부모 조회 시, 혹은 해당 타입이 여러개 일때 한꺼번에 조회
    • Map<String , 조회 타입> 형식
  • BeanDefinition
    • 인터페이스 , 스프링 빈 설정 메타 정보
    • 다양한 설정 정보를 BeanDefinition추상화해서 사용
    • 자바 설정은 빈 팩토리를 활용
    • xml은 직접 스프링빈을 컨테이너에 등록 (요즘 안쓴다) -> 장점 : 컴파일 없이 빈 설정 정보 변경 가능
    • Bean 당 메타 정보 생성

댓글