-
[Spring] 스프링 핵심 원리 - 스프링 컨테이너와 스프링 빈Study/Spring 2025. 4. 16. 21:49
스프링 컨테이너 생성
- ApplicationContext 를 스프링 컨테이너라고 함 (인터페이스임)
- 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스를 만들 수 있음
- 참고)
- 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext 로 구분해서 이야기함
- BeanFactory 를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext 를 스프링 컨테이너라고 함
스프링 컨테이너의 생성 과정
- 스프링 컨테이너 생성
- 스프링 컨테이너를 생성할 때는 구성 정보를 지정해줘야 함
- 스프링 빈 등록
- 빈 이름은 메서드명을 사용함
- 빈 이름을 직접 부여할 수도 있음 (빈 이름은 항상 다른 이름을 부여해야 함)
- 스프링 빈 의존관계 설정 - 준비
- 스프링 빈 의존관계 설정 - 완료
- 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)함
스프링 빈 조회
- 모든 빈 출력하기
- applicationContext.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름 조회
- applicationContext.getBean() : 빈 이름으로 빈 객체(인스턴스) 조회
- 조회 대상 스프링 빈이 없으면 예외 발생
- applicationContext.getBeansOfType() : 해당 타입의 모든 빈 조회
- 부모 타입으로 조회하면, 자식 타입도 함께 조회함
- 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면, 모든 스프링 빈 조회함
- 어플리케이션 빈 출력하기
- 스프링이 내부에서 사용하는 빈을 제외하고, 내가 등록한 빈만 출력
- 스프링 내부에서 사용하는 빈은 getRole()로 구분할 수 있음
- ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
- ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
BeanFactory와 ApplicationContext
- BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈을 관리하고 조회하는 역할 담당
- getBean() 제공
- 위에서 사용했던 대부분의 기능은 해당 인터페이스가 제공하는 기능임
- ApplicationContext
- BeanFactory 기능을 모두 상속받아 제공함
- 빈을 관리하고 조회하는 기능과 더불어, 수많은 부가기능을 제공함 (여러 인터페이스를 다중 상속 받음)
- 정리하면,
- ApplicationContext는 BeanFactory의 기능을 상속받아 빈 관리 기능 + 편리한 부가기능 제공
- BeanFactory나 ApplicationContext를 스프링 컨테이너라 함
- BeanFactory를 직접 사용할 일은 거의 없음
- 부가기능이 포함된 ApplicationContext를 사용함
추가) ApplicationContext의 부가기능
더보기- 메시지소스를 활용한 국제화 기능
- 환경변수
- 로컬, 개발, 운영 등을 구분해서 처리
- 어플리케이션 이벤트
- 이벤트를 발행하고 구독하는 모델을 편리하게 지원
- 편리한 리소스 조회
- 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회
다양한 설정 형식 지원 - 자바 코드, XML
- 스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있음
- 자바 코드, XML, Groovy 등
스프링 빈 설정 메타 정보 - BeanDefinition
- 스프링이 위와 같이 다양한 설정 형식을 지원할 수 있는 이유는 BeanDefinition 추상화가 있기 때문임 (여기서도 역할과 구현을 개념적으로 나눈 것)
- BeanDefinition을 빈 설정 메타정보라고 함
- @Bean, <bean>당 각각 하나씩 메타 정보가 생성됨
예시)
더보기- AnnotationConfigApplicationContext는 AnnotatedBeanDefinitionReader를 사용해 AppConfig.class를 읽고 BeanDefinition을 생성함
참고
'Study > Spring' 카테고리의 다른 글
[Spring] 스프링 핵심 원리 - 빈 생명주기 콜백 (0) 2025.04.16 [Spring] 스프링 핵심 원리 - 의존관계 자동 주입 (0) 2025.04.16 [Spring] 스프링 핵심 원리 - 컴포넌트 스캔 (0) 2025.04.16 [Spring] 스프링 핵심 원리 - 싱글톤 컨테이너 (0) 2025.04.16 [Spring] 스프링 핵심 원리 - 객체 지향 설계와 스프링 (0) 2025.04.16