Spring/[인프런 김영한 스프링 핵심 원리 -기본편]

[인프런 김영한 스프링 핵심 원리 - 기본편] 스프링 컨테이너와 스프링 빈

h2boom 2024. 8. 13. 15:24

스프링 컨테이너

// 스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplication(JavaConfig 클래스.class);
  • ApplicationContext = 스프링 컨테이너
    • ApplicationContext는 인터페이스로 다형성이 적용되어 있다.
  • 스프링 컨테이너는 XML 기반이나 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.
    • 애노테이션 기반 자바 설정 클래스 = @Configuration으로 선언된 클래스
  • 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext를 구분해서 이야기한다.
    • BeanFactory는 보통 직접 사용하지 않기에 일반적으로 ApplicationContext를 스프링 컨테이너라고 한다.

 

  • 빈 이름과 빈 객체에는 자바 설정 클래스의 각 메소드 명과 반환 객체가 저장된다.
    • 빈 이름을 직접 부여할 수 있으며, 항상 다른 이름을 부여해야한다.

 

  • 스프링 컨테이너 생성 과정
    1. 스프링 컨테이너 생성
      • new AnnotationConfigApplicationContext(~.class)
    2. 스프링 빈 등록
      • 자바 설정 클래스 정보(메소드)를 사용해서 스프링 빈을 등록한다.
    3. 스프링 빈 의존관계 설정
      • 컨테이너는 설정 정보를 참고해서 의존관계 주입(DI)한다.

 

  • 스프링 빈을 생성하는 단계와 의존관계를 주입하는 단계가 나눠져있다.

스프링 빈

  • 스프링 빈마다 Role이 있다.
    • ROLE_APPLICATION : 직접 등록한 (직접 생성한) 애플리케이션 빈
    • ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈

 

  • 스프링 컨테이너에서 빈을 조회하는 방법 (기본)
    • getBean(빈이름, 타입)
    • getBean(타입)
    • 조회 대상 빈이 없으면 예외 발생
  • 스프링 빈 조회 (동일한 타입 둘 이상)
    • 타입으로만 조회 시 같은 타입의 빈이 둘 이상 존재하면 예외가 발생하기에 이름, 타입 모두 지정해야한다.
    • getBeansOfType() : 해당 타입의 모든 빈을 Map으로 조회할 수 있다.
  • 스프링 빈 조회 (상속 관계)
    • 부모 타입으로 조회하면 자식 타입도 함께 조회된다.
    • Object 타입으로 조회하면 모든 스프링 빈을 조회할 수 있다.

 

  • 스프링 빈 설정 메타 정보 (BeanDefinition) - 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용한다.
    • 자바 코드에서는 @Bean, XML에서는 <bean> 하나당 각 메타정보가 생성된다.
      • 스프링 컨테이너가 메타정보를 기반으로 스프링 빈을 생성한다.
      • AnnotationConfigApplicationContext의 AnnotationBeanDefinitionReader를 사용해서 자바 설정 클래스 파일을 읽고 BeanDefinition을 생성한다.

 

  • 스프링 빈을 생성하는 방법
    • 직접 스프링 빈을 등록하는 방법
    • FactoryBean을 통해서 등록하는 방법 ( = 자바 Config 클래스로 등록하는 방법)

BeanFactory / ApplicationContext

  • BeanFactory : 스프링 컨테이너의 최상위 인터페이스로 빈을 관리하고 조회하는 역할을 한다.
  • ApplicationContext : BeanFactory 기능 + 수많은 편리한 부가 기능을 제공한다.
    • 추가적인 부가 기능 - 메시지 소스를 활용한 국제화 기능, 환경변수, 애플리케이션 이벤트,  편리한 리소스 조회

 

  • BeanFactory를 직접 사용할 일은 없고 ApplicationContext를 주로 사용한다.
  • BeanFactory / ApplicationContext를 스프링 컨테이너라고 한다.

출처 : [인프런 김영한 스프링 핵심 원리 - 기본편]

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

 

스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런

김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보

www.inflearn.com