[Spring] 스프링 컨테이너와 스프링 빈

ggamang·2023년 3월 28일
0

JAVA&Spring

목록 보기
13/27

스프링 컨테이너 생성

ApplicationContext applicationContext = 
new AnnotationConfigApplicationContext(AppConfig.class);

스프링 컨테이너 : ApplicationContext (인터페이스)
AnnotationConfigApplicationContext(구현체)

스프링 컨테이너 생성과정

  1. 스프링 컨테이너 생성

스프링 컨테이너 생성 시 구성정보(AppConfig.class)를 지정해주어야 한다
  1. 스프링 빈 등록

빈 이름: 메서드 이름을 사용 or 직접 부여 @Bean(name=”memberService2”)

❗️빈 이름은 항상 다른 이름을 부여해야 한다
  1. 스프링 빈 의존관계 설정

설정 정보를 참고해서 의존관계를 주입한다

컨테이너에 등록된 모든 빈 조회

스프링 빈 조회 - 기본

조회 대상 스프링 빈이 없다면 NoSuchBeanDefinitionException이 발생한다

스프링 빈 조회 - 동일한 타입이 둘 이상

이름없이 타입으로 조회 시 같은 타입의 스프링 빈이 둘 이상이면 오류가 발생한다(NoUniqueBeanDefinitionException) → 이름 지정 필요

ac.getBeansOfType() : 해당 타입의 모든 빈 조회 가능

스프링 빈 조회 - 상속 관계

부모 타입으로 조회하면 자식 타입도 함께 조회한다

  • 부모 타입으로 조회 시, 자식이 둘 이상 있으면 중복 오류 발생
  • 부모 타입으로 조회 시 자식이 둘 이상 있으면 빈 이름을 지정한다

BeanFactory와 ApplicationContext

BeanFactory

스프링 컨테이너의 최상위 인터페이스이다

스프링 빈을 관리하고 조회하는 역할을 담당한다

직접 사용할 일은 거의 없다

ApplicationContext

BeanFactory 기능을 모두 상속받아서 제공한다

ApplicationContext는 빈 관리기능 + 수 많은 부가 기능을 제공한다

BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다

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

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

  • 애노테이션 기반 자바 코드 사용
  • XML 설정: GenericXmlApplicationContext를 사용하면서 xml 설정 파일을 넘기면 된다 → XML 기반 설정은 요즘 거의 사용하지 않는다

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

스프링이 다양한 설정 형식을 지원하는 이유

: BeanDefinition(빈 설정 메타정보)이라는 추상화 - 역할과 구현을 개념적으로 나눔

→ 스프링 컨테이너는 자바, XML 여부는 알 필요 없이 오직 BeanDefinition만 알면 된다

BeanDefinition 빈 설정 메타정보

@Bean, bean 당 각각 하나씩 메타 정보가 생성된다

스프링 컨테이너는 이 메타 정보를 기반으로 스프링 빈을 생성한다

0개의 댓글