티스토리 뷰

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

 

생성

스프링 컨테이너 생성

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

ApplicationContext를 스프링 컨테이너라 함, 이는 인터페이스다.

 

스프링 빈 등록

스프링 빈 등록

스프링 빈 저장소에 @Bean이 붙은 메서드를 이름으로, 객체를 빈 객체로 저장해준다.

빈 이름을 직접 부여 가능하며 -> @Bean( name = " ~ " )

빈 이름은 항상 다른 이름을 부여해야 한다.

 

 

이후에 스프링 빈 의존관계 설정을 준비하고 주입해준다.  

스프링 빈 의존관계 설정 준비
스프링 빈 의존관계 설정 완료

+) 빈을 알고싶다.

  모든 빈 출력하기

    applicationContext.getBeanDefinitionNames() -> 스프링에 등록된 모든 빈 이름을 조회

    applicationContext.getBean() -> 빈 이름으로 빈 객체를 조회

  애플리케이션 빈 출력하기 ( 내가 등록한, getRole을 사용하자 )

    beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION -> 사용자 정의 빈

    

 

스프링 빈 조회

스프링 빈을 조회하는 방법은 다음과 같다.

1. 빈이름과 타입으로 검색하기

(빈 이름, 타입)

2. 타입으로 검색하기

(타입)

동일 타입이 둘 이상이라면?

NoUniqueBeanDefinitionException 이 발생한다.

빈 이름 지정으로 해결 가능

상속 관계에서의 빈 조회

부모를 조회한다면 자식들은 기본적으로 함께 조회된다. (부모 호출 -> 모든 자식 호출)

 

 

BeanFactory와 ApplicationContext

BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회하는 역할 담당 ( getBean() )  

ApplicationContext

  • BeanFacotry 기능을 상속 받아 사용
  • MessageSource를 활용한 국제화 기능
  • EnviromentCapable 환경변수 - 로컬, 개발, 운영 등을 구분하여 관리
  • ApplicationEventPublisher - 이벤트를 발행하고 구독하는 모델을 지운
  • ResourceLoader - 편리한 리소스 조회

ApplicationContext는 BeanFactory외에 편리한 부가 기능 사용을 위한 인터페이스를 상속받는다.

 

 

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

설정 정보를 다양한 형식으로 받아올 수 있는 스프링 컨테이너

 

 

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

억떡게 스프링은 이렇게 다양한 설정 정보를 지원하는가?

스프링 컨테이너는 어떤 형식의 설정 정보인지 상관하지 않는다. -> BeanDefinition이라는 추상화에만 의존한다.

스프링 컨테이너가 설정 정보를 읽어오는 간략 과정

 

 

 

 

 

 

 

본 포스팅은 인프런 강의 김영한님의

[ 스프링 핵심 원리 - 기본편 ] 을 수강하며 작성한 내용입니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30