BackEnd 학습/Spring Framework

Spring(스프링) - 스프링 컨테이너와 스프링 빈

잉아당 2022. 11. 20. 16:56
728x90

스프링 컨테이너

 

- ApplicationContext

인터페이스이며 스프링 컨테이너라고 함

자바기반과 XML 기반으로 생성할 수 있음

스프링 컨테이너가 생성되면서 내부에 빈 저장소가 생성

스프링 컨테이너 생성시 구성정보를 전달 해야 함 (AppConfig.class)

스프링 컨테이너 생성 되면서 @Bean 어노테이션이 등록된 메서드를 모두 호출하여 Bean 객체를 등록 

=> 이때 의존관계가 설정 됨

빈 객체 name은 모두 다르게 설정 해주어야 함

 

스프링 빈

ApplicationContext에서 getBean을 통해 가져올 수 있음

빈이름,타입 혹은 타입으로 가져올 수 있음

상속관계에 의한 부모 - 자식관계에서 부모타입을 조회하면 자식타입까지 같이 조회가 됨 

최상위인 Object를 조회할 경우 모든 스프링 빈 객체가 조회가 됨

 

Bean Factory

BeanFactory -> ApplicationContext -> AnnotationCofigApplicationContext

AnnotationCofigApplicationContext는 ApplicationContext를 상속 받고 ApplicationContext는 BeanFactory를 상속받음 

 

- BeanFactory 

스프링 컨테이너의 최상위 인터페이스

스프링 빈을 관리하고 조회하는 역할을 함 

getBean() 메서드 제공

 

- ApplicationContext

BeanFactory의 기능을 상속 받아 제공

다양한 기능을 제공(이벤트, 메시지리소스, 환경변수 등)

 

#메시지 리소스 국제화기능

한국에서 들어오면 한국어, 영어권에서 들어오면 영어 

#환경변수 

로컬, 개발, 운영 등 구분 

#애플리케이션 이벤트 

이벤트를 발행하고 구독하는 모델 관리 

#리소스 조회 

편리한 리소스 조회 제공

 

다양한 설정 방법(XML, 자바 코드)

- 어노테이션 기반 자바 코드 설정 

new AnnotationConfigApplicationContext(설정.class) 이용

자바 코드로 된 설정 파일을 넘겨줌

 

- XML 기반 설정

GenericXmlApplicationContext 이용 

레거시에서 주로 사용되고 요즘에는 사용되지 않음 

컴파일 없이 빈 설정정보 변경 가능

 

스프링 빈 메타 정보 - BeanDefinition

역할과 구현을 개념적으로 나눔 

자바코드인지 XML 인지 구분 없이 BeanDefinition을 만들어서 사용

BeanDefinition을 빈 설정 메타 정보라고 함 

스프링 컨테이너는 BeanDefinition에만 의존

 

AnnotationConfigApplcationContext는 AnnotatedBeanDefinitionReader를 사용해 설정 클래스 파일을 읽어 BeanDefinition을 만들고 스프링 컨테이너는 해당 인터페이스를 참조하게 됨

 

 

 

 

 

출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8