스프링 컨테이너
// 스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplication(JavaConfig 클래스.class);
- ApplicationContext = 스프링 컨테이너
- ApplicationContext는 인터페이스로 다형성이 적용되어 있다.
- 스프링 컨테이너는 XML 기반이나 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.
- 애노테이션 기반 자바 설정 클래스 = @Configuration으로 선언된 클래스
- 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext를 구분해서 이야기한다.
- BeanFactory는 보통 직접 사용하지 않기에 일반적으로 ApplicationContext를 스프링 컨테이너라고 한다.
- 빈 이름과 빈 객체에는 자바 설정 클래스의 각 메소드 명과 반환 객체가 저장된다.
- 빈 이름을 직접 부여할 수 있으며, 항상 다른 이름을 부여해야한다.
- 스프링 컨테이너 생성 과정
- 스프링 컨테이너 생성
- new AnnotationConfigApplicationContext(~.class)
- 스프링 빈 등록
- 자바 설정 클래스 정보(메소드)를 사용해서 스프링 빈을 등록한다.
- 스프링 빈 의존관계 설정
- 컨테이너는 설정 정보를 참고해서 의존관계 주입(DI)한다.
- 스프링 컨테이너 생성
- 스프링 빈을 생성하는 단계와 의존관계를 주입하는 단계가 나눠져있다.
스프링 빈
- 스프링 빈마다 Role이 있다.
- ROLE_APPLICATION : 직접 등록한 (직접 생성한) 애플리케이션 빈
- ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
- 스프링 컨테이너에서 빈을 조회하는 방법 (기본)
- getBean(빈이름, 타입)
- getBean(타입)
- 조회 대상 빈이 없으면 예외 발생
- 스프링 빈 조회 (동일한 타입 둘 이상)
- 타입으로만 조회 시 같은 타입의 빈이 둘 이상 존재하면 예외가 발생하기에 이름, 타입 모두 지정해야한다.
- getBeansOfType() : 해당 타입의 모든 빈을 Map으로 조회할 수 있다.
- 스프링 빈 조회 (상속 관계)
- 부모 타입으로 조회하면 자식 타입도 함께 조회된다.
- Object 타입으로 조회하면 모든 스프링 빈을 조회할 수 있다.
- 스프링 빈 설정 메타 정보 (BeanDefinition) - 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용한다.
- 자바 코드에서는 @Bean, XML에서는 <bean> 하나당 각 메타정보가 생성된다.
- 스프링 컨테이너가 메타정보를 기반으로 스프링 빈을 생성한다.
- AnnotationConfigApplicationContext의 AnnotationBeanDefinitionReader를 사용해서 자바 설정 클래스 파일을 읽고 BeanDefinition을 생성한다.
- 자바 코드에서는 @Bean, XML에서는 <bean> 하나당 각 메타정보가 생성된다.
- 스프링 빈을 생성하는 방법
- 직접 스프링 빈을 등록하는 방법
- FactoryBean을 통해서 등록하는 방법 ( = 자바 Config 클래스로 등록하는 방법)
BeanFactory / ApplicationContext
- BeanFactory : 스프링 컨테이너의 최상위 인터페이스로 빈을 관리하고 조회하는 역할을 한다.
- ApplicationContext : BeanFactory 기능 + 수많은 편리한 부가 기능을 제공한다.
- 추가적인 부가 기능 - 메시지 소스를 활용한 국제화 기능, 환경변수, 애플리케이션 이벤트, 편리한 리소스 조회
- BeanFactory를 직접 사용할 일은 없고 ApplicationContext를 주로 사용한다.
- BeanFactory / ApplicationContext를 스프링 컨테이너라고 한다.
출처 : [인프런 김영한 스프링 핵심 원리 - 기본편]
스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런
김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보
www.inflearn.com
'Spring > [인프런 김영한 스프링 핵심 원리 -기본편]' 카테고리의 다른 글
[인프런 김영한 스프링 핵심 원리 - 기본편] 컴포넌트 스캔 (0) | 2024.08.14 |
---|---|
[인프런 김영한 스프링 핵심 원리 - 기본편] 싱글톤 컨테이너 (0) | 2024.08.13 |
[인프런 김영한 스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) | 2024.08.12 |
[인프런 김영한 스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해1 - 예제 만들기 (0) | 2024.08.12 |
[인프런 김영한 스프링 핵심 원리 - 기본편] 객체 지향 설계와 스프링 (1) | 2024.08.12 |