출처
다형성
https://eboong.tistory.com/407
스프링 컨테이너
: 객체관리를 수행하는 그릇으로 생각하면 된다.
즉 주입(DI)을 이용하여 객체를 관리하는 컨테이너!
빈의 생성 및 관계, 사용, 생명 주기 등을 주로 담당한다.
스프링 컨테이너를 사용하는 이유? 장점?
> 객체간의 의존성을 낮추기 위함.
> 싱글톤 패턴의 문제점을 해결하면서 객체 인스턴스를 싱글톤으로 관리한다.
강의 들으면서 더 추가해나갈 예정
빈 (Bean)
: 컨테이너에 의해 관리되는 애플리케이션의 핵심을 이루는 객체이다.
스프링 빈 저장소
빈 이름 : 메소드명
빈 객체 : 반환되는 객체
스프링 컨테이너에서 스프링 빈을 조회하는 방법
ac.getBean(타입)
ac.getBean(빈 이름, 타입)
ac.getBeansOfType(타입)
> 해당 타입의 모든 빈을 조회할 수 있다.
ac.getBeanDefinitionNames()
> 스프링에 등록된 모든 빈 이름을 조회한다.
스프링 상속 관계
> 부모 타입으로 조회하면 자식들도 함께 조회된다.
모든 자바 객체의 최고 부모인 Object 타입으로 조회하면 모든 스프링 빈을 조회하게 된다.
1) 부모 타입으로 조회시, 자식이 둘 이상이면 중복 오류가 발생한다.
NoUniqueBeanDefinitionException
> 따라서 타입 뿐만 아니라 빈 이름을 지정해 불러오면 오류가 나지 않는다.
ac.getBean(빈이름, 타입)
BeanFactory
>> 스프링 컨테이너의 최상위 인터페이스이다.
스프링 빈을 관리하고 조회하는 역할을 담당
getBean()을 비롯한 대부분의 기능을 제공하는 인터페이스.
ApplicationContext
>> BeanFactory 기능을 모두 상속받아서 제공한다.
빈을 관리하고 조회하는 기능은 물론이고
편리한 부가기능을 제공한다.
(부가기능)
1) 메세지소스를 활용한 국제화 기능
2) 환경변수
3) 애플리케이션 이벤트
4) 편리한 리소스 조회
AnnotationConfigApplicationContext
>> ApplicationContext 인터페이스의 구현체
(참고로 ApplicationContext 인터페이스의 구현체의 종류는 여러가지가 있음)
@Configuration
: 클래스 선언 앞에 기술하는 어노테이션
해당 클래스가 빈의 설정을 할 것을 나타냄.
@Bean
: 메소드 앞에 기술하는 어노테이션
해당 메소드를 스프링 컨테이너에 등록하기 위함.
다양한 설정 형식 지원
> 스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계가 되어 있음.
어떻게 다양한 형식의 설정 정보를 받아들일 수 있게 되어있는걸까?
바로 역할과 구현을 개념적으로 나눈 것이다.
오직 스프링은 BeanDefinition(추상화)만 알면 된다.
즉 BeanDefinition에만 의존함.
BeanDefinition을 빈 설정 메타 정보라고 한다.
즉,
AnnotationConfigApplicationContext는 AnnotatedBeanDefinitionReader를
사용해서 AppConfig.class를 읽고
BeanDefinition을 생성한다.
(교재 65p)
'여니의 프로그래밍 study > Spring & Spring Boot' 카테고리의 다른 글
[스프링부트] 프로젝트 생성하기 (0) | 2022.03.03 |
---|---|
[스프링부트] 싱글톤 컨테이너 (0) | 2022.01.16 |
[스프링부트] 스프링 컨테이너와 스프링 빈 (1) | 2022.01.16 |
[스프링부트] loC, DI, 컨테이너 (0) | 2022.01.15 |
[스프링 핵심 원리 이해2] - AppConfig, DI (0) | 2022.01.10 |