ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 스프링 핵심 원리 - 스프링 컨테이너와 스프링 빈
    Study/Spring 2025. 4. 16. 21:49

    스프링 컨테이너 생성

    • ApplicationContext 를 스프링 컨테이너라고 함 (인터페이스임)
    • 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스를 만들 수 있음
    • 참고)
      • 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext 로 구분해서 이야기함
      • BeanFactory 를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext 를 스프링 컨테이너라고 함

     

    스프링 컨테이너의 생성 과정

    1. 스프링 컨테이너 생성
      • 스프링 컨테이너를 생성할 때는 구성 정보를 지정해줘야 함
    2. 스프링 빈 등록
      • 빈 이름은 메서드명을 사용함
      • 빈 이름을 직접 부여할 수도 있음 (빈 이름은 항상 다른 이름을 부여해야 함)
    3. 스프링 빈 의존관계 설정 - 준비
    4. 스프링 빈 의존관계 설정 - 완료
      • 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)함

     

    스프링 빈 조회

    • 모든 빈 출력하기
      • applicationContext.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름 조회
      • applicationContext.getBean() : 빈 이름으로 빈 객체(인스턴스) 조회
        • 조회 대상 스프링 빈이 없으면 예외 발생
      • applicationContext.getBeansOfType() : 해당 타입의 모든 빈 조회
      • 부모 타입으로 조회하면, 자식 타입도 함께 조회함
        • 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면, 모든 스프링 빈 조회함
    • 어플리케이션 빈 출력하기
      • 스프링이 내부에서 사용하는 빈을 제외하고, 내가 등록한 빈만 출력
      • 스프링 내부에서 사용하는 빈은 getRole()로 구분할 수 있음
        • ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
        • ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈

     

    BeanFactory와 ApplicationContext

    • BeanFactory
      • 스프링 컨테이너의 최상위 인터페이스
      • 스프링 빈을 관리하고 조회하는 역할 담당
        • getBean() 제공
        • 위에서 사용했던 대부분의 기능은 해당 인터페이스가 제공하는 기능임
    • ApplicationContext
      • BeanFactory 기능을 모두 상속받아 제공
      • 빈을 관리하고 조회하는 기능과 더불어, 수많은 부가기능을 제공함 (여러 인터페이스를 다중 상속 받음)
    • 정리하면,
      • ApplicationContext는 BeanFactory의 기능을 상속받아 빈 관리 기능 + 편리한 부가기능 제공
      • BeanFactory나 ApplicationContext를 스프링 컨테이너라 함
        • BeanFactory를 직접 사용할 일은 거의 없음
        • 부가기능이 포함된 ApplicationContext를 사용함

     

    추가) ApplicationContext의 부가기능

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

     

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

    • 스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있음
      • 자바 코드, XML, Groovy 등

     

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

    • 스프링이 위와 같이 다양한 설정 형식을 지원할 수 있는 이유는 BeanDefinition 추상화가 있기 때문임 (여기서도 역할과 구현을 개념적으로 나눈 것)
    • BeanDefinition을 빈 설정 메타정보라고 함
      • @Bean, <bean>당 각각 하나씩 메타 정보가 생성됨

     

    예시)

    더보기
    • AnnotationConfigApplicationContext는 AnnotatedBeanDefinitionReader를 사용해 AppConfig.class를 읽고 BeanDefinition을 생성함

     

    참고

    스프링 핵심 원리 - 기본편

    댓글

Designed by Tistory.