1. 스프링 컨테이너 생성
1) 개념
- ApplicationContext 를 "스프링 컨테이너" 라 한다.
- ApplicationContext 는 인터페이스다.
- 스프링 컨테이너는 XML 기반으로도 (new GenericXmlApplicationContext("appConfig.xml")),
애노테이션 기반의 자바 설정 클래스 (new AnnotationConfigApplicationContext(AppConfig.class))로
만들 수 있다.
* 정확히는 스프링 컨테이너를 BeanFactory, ApplicationContext로 구분하지만,
BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라 한다.
2) 내부 동작
- AppConfig.class 를 구성 정보로 활용하여, 스프링 컨테이너를 생성하고, 스프링 빈을 등록한다.
- Bean 이름은 메서드 이름을 사용한다. (직접 부여할 수도 있음 : @Bean (name="..."))
2. 컨테이너에 등록된 빈 조회
1) '스프링 빈' 조회 방법
- ac.getBean(빈 이름, 타입)
- ac.getBean(타입)
→ 동일한 타입의 스프링 빈 객체가 여러 개가 있으면, 이름까지 명시해주어야 함
→ 모두 조회하고 싶으면 .getBeansOfType(CLASS TYPE)
3. 스프링 컨테이너 내부 구조
1) 구성 정보, Config의 구현
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈을 관리하고 조회하는 역할 => ex. getBean()
ApplicationContext
- BeanFactory 기능을 모두 상속받아 제공
- 추가적인 부가 기능... (나중에 공부)
ApplicationContext_Impl
- 애노테이션 기반 자바 코드 설정
- XML 기반 설정
2) BeanDefinition Type (역할)
> 코드 레벨로 더 들어가면...
(javac : .java → .class kotlinc : .kt → .class 와 비슷..?)
(각각의 컴파일러, Reader가 있다고 생각하고 최종적으로 바이트코드 .class, BeanDefinition을 만드는 흐름)
- 스프링 컨테이너는 BeanDefinition (역할) 밖에 모른다.
애플리케이션의 구성정보가 Annotation 기반 자바 코드인지, XML 기반인지.. (구현) 모른다.
- 스프링 컨테이너 ApplicationContext의 구현체인 각각의 ...ApplicationContext가 ...Reader를 사용해서
AppConfig.class / "appConfig.xml" 의 설정 정보를 읽고 BeanDefinition (빈 메타정보) 을 생성한다.
'Spring > 기본' 카테고리의 다른 글
6. 컴포넌트 스캔 (0) | 2023.08.04 |
---|---|
5. 싱글톤 컨테이너 (0) | 2023.08.04 |
3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 (0) | 2023.07.21 |
2. 스프링 핵심 원리 이해1 - 예제 만들기 (0) | 2023.07.20 |
1. 객체지향 설계와 스프링 (0) | 2023.07.18 |