김영한의 스프링 핵심 원리(기본편) - BeanFactory와 ApplicationContext

2025. 1. 31. 21:39·김영한의 스프링 핵심 원리(기본편)

Question

  • BeanFactory와 ApplicationContext의 차이는?
  • ApplicationContext에서 제공하는 부가 기능은?
  • ApplicationContext의 구현체에는 무엇이 있는가?
  • ApplicationConext에서 다양한 언어로된 구현체가 있을 수 있는 이유는?

 

BeanFactory와 ApplicationContext의 관계

  • BeanFactory
    • 스프링 컨테이너의 최상위 인터페이스다.
    • 스프링 빈을 관리하고 조회하는 역할을 담당한다.
    • getBean() 을 제공한다.
    • 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다.
  • ApplicationContext
    • BeanFactory 기능을 모두 상속받아서 제공한다.
    • 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 둘의 차이가 뭘까?
    • 빈을 관리하고 조회하는 기능은 외 다른 여러 기능이 추가 됨.
    • 따라서, BeanFactory를 직접 사용할 일은 거의 없고 ApplicationContext를 주로 사용함
    • BeanFcatory, ApplicationContext를 스프링 컨테이너라 함.

 

ApplicationContext의 부가 기능

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

 

ApplicationContext의 구현체

  • ApplicationContext의 구현체는 무슨 형식으로 파일을 구성하냐에 따라 달라짐
  • 예를 들어, java 기반 코드 설정이면 AnnotationConfigApplicationContext가 됨
  • xml 기반이면 GenericXmlApplicationContext가 됨.
  • 원하면 다른 기반의 구성을 직접 구현체를 만들어서 사용해도 됨.
  • 스프링에서 이렇게 여러 구현을 지원할 수 있는 방법은?

 

BeanDefinition

  • AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성한다.
  • GenericXmlApplicationContext 는 XmlBeanDefinitionReader 를 사용해서 appConfig.xml 설정 정보를 읽고 BeanDefinition 을 생성한다.
  • 새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader를 만들어서 BeanDefinition 을 생성하면 된다.
  • 이런식으로, 어떠한 형식이든 Reader를 통해서 다른 형식에서도 똑같이 생성되는 BeanDefinition을 생성해내면 됨.

'김영한의 스프링 핵심 원리(기본편)' 카테고리의 다른 글

김영한의 스프링 핵심 원리(기본편) - 스프링 빈의 라이프사이클과 생명주기 콜백(@PostConstruct, @PreDestory)  (2) 2025.02.02
김영한의 스프링 핵심 원리(기본편) - Bean 주입 방식과 Bean 중복 조회 문제  (2) 2025.02.02
김영한의 스프링 핵심 원리(기본편) - @ComponentScan과 @Autowired  (2) 2025.01.31
김영한의 스프링 핵심 원리(기본편) - 스프링의 싱글톤 패턴과 @Configuration  (1) 2025.01.31
김영한의 스프링 핵심 원리(기본편) - 다형성, OCP, DI  (0) 2025.01.30
'김영한의 스프링 핵심 원리(기본편)' 카테고리의 다른 글
  • 김영한의 스프링 핵심 원리(기본편) - Bean 주입 방식과 Bean 중복 조회 문제
  • 김영한의 스프링 핵심 원리(기본편) - @ComponentScan과 @Autowired
  • 김영한의 스프링 핵심 원리(기본편) - 스프링의 싱글톤 패턴과 @Configuration
  • 김영한의 스프링 핵심 원리(기본편) - 다형성, OCP, DI
5jyan5
5jyan5
  • 5jyan5
    jyan
    5jyan5
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • 김영한의 스프링 핵심 원리(기본편) (8)
      • 김영한의 스프링 핵심 원리 - 고급편 (11)
      • 김영한의 스프링 MVC 1편 (1)
      • 김영한의 스프링 DB 1편 (3)
      • 김영한의 스프링 MVC 2편 (3)
      • 김영한의 ORM 표준 JPA 프로그래밍(기본편) (9)
      • 김영한의 스프링 부트와 JPA 활용2 (2)
      • 김영한의 실전 자바 - 중급 1편 (1)
      • 김영한의 실전 자바 - 고급 1편 (9)
      • 김영한의 실전 자바 - 고급 2편 (9)
      • Readable Code: 읽기 좋은 코드를 작성.. (2)
      • 김영한의 실전 자바 - 고급 3편 (9)
      • CKA (118)
      • 개발 (37)
      • 경제 (4)
      • 리뷰 (1)
      • 정보 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      requset scope
      락
      jdk 동적 프록시
      단방향 맵핑
      양방향 맵핑
      @discriminatorvalue
      @within
      JPQL
      고급
      스레드
      cglib
      gesingleresult
      김영한
      프록시
      jpq
      Thread
      @args
      typequery
      프록시 팩토리
      자바
      WAS
      페치 조인
      @discriminatorcolumn
      조회 성능 최적화
      reentarantlock
      버퍼
      Target
      빈 후처리기
      hibernate5module
      log trace
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    5jyan5
    김영한의 스프링 핵심 원리(기본편) - BeanFactory와 ApplicationContext
    상단으로

    티스토리툴바