스프링 컨테이너와 스프링 빈

KOO HEESEUNG·2021년 10월 14일
0
post-thumbnail

인프런 김영한 님의 <스프링 핵심 원리 - 기본편> 강의 내용을 정리한 것입니다.

스프링 컨테이너

ApplicationContext 인터페이스를 스프링 컨테이너라 한다.

정확히는 스프링 컨테이너를 부를 때 BeanFactoryApplicationContext 로 구분한다. BeanFactory 를 직접 사용하는 경우는 거의 없기 때문에, 일반적으로 ApplicationContext 를 스프링 컨테이너라 한다.

스프링 컨테이너는 XML이나 애노테이션 기반의 자바 설정 클래스로 만들 수도 있다.
스프링 컨테이너는 @Configuration 이 붙은 자바 클래스를 설정(구성) 정보로 사용한다. 여기서 @Bean 이 붙은 메서드를 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록한다.
스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.
스프링 빈은 @Bean 이 붙은 메서드명을 스프링 빈 이름으로 사용한다.

스프링 컨테이너 생성과정

  1. 스프링 컨테이너 생성
new AnnotationConfigApplicationContext(AppConfig.class)
  • 스프링 컨테이너를 생성할 때 위와 같이 파라미터로 구성정보를 지정해준다.
  1. 스프링 빈 등록
  • 스프링 컨테이너는 구성 정보를 사용해 스프링 빈을 등록한다.
  • 빈 이름은 메서드명을 사용한다.(직접 부여하는 것도 가능)
  • 빈 이름은 항상 다른 이름을 부여해야 한다.
  1. 스프링 빈 의존관계 설정
  • 스프링 컨테이너는 설정 정보를 참고하여 의존관계를 주입한다.
  • 빈을 생성하고 의존관계를 주입하는 단계가 나뉘어져 있지만, 자바 코드로 스프링 빈을 등록하면, 생성자 호출과 의존관계 주입이 한번에 처리된다.(의존관계 자동 주입)

스프링 빈 조회 - 상속관계

스프링 빈 조회시 부모 타입으로 조회하면 자식 타입도 함께 조회한다.
= Object 타입으로 조회하면 모든 스프링 빈 조회.

BeanFactory와 ApplicationContext

BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회하는 역할을 담당하며, 해당 기능들을 제공

ApplicationContext

  • ApplicationContext = BeanFactory + 𝝰
  • BeanFactory 기능을 모두 상속받아 제공
  • BeanFactory의 기능 외에 많은 부가기능을 제공 :

MessageSource : 메시지 소스를 활용한 국제화 기능

  • 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력

EnvironmentCapable : 환경변수

  • 로컬, 개발, 운영 등을 구분해서 처리. 환경별로.

ApplicationEventPublisher : 애플리케이션 이벤트

  • 이벤트 발행, 구독하는 모델을 편리하게 지원

ResourceLoader : 편리한 리소스 조회

  • 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회

BeanDefinition

다양한 설정 형식 지원

xml 기반 설정은 최근 잘 사용하지 않지만, 레거시 프로젝트에 xml 로 되어 있는 경우가 있으므로 알아두는 것이 좋음.

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

스프링이 다양한 설정형식을 지원할 수 있는 이유는 BeanDefinition 으로 추상화되어 있기 때문.
스프링 컨테이너는 BeanDefinition만 알고 있기 때문에 설정 정보가 자바 코드인지, XML인지 알 필요가 없다.

BeanDefinition = 빈 설정 메타정보
@Bean 혹은 <bean> 당 하나씩 메타정보가 생성되며, 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.

0개의 댓글