2023. 12. 11. 17:26 SpringBoot
Spring ApplicationContext
Spring ApplicationContext란 무엇인가?
Spring에서 IOC Container를 BeanFactory라고 하며 이 BeanFactory에 여러 기능이 추가된 class를 ApplicationContext라고 한다.
Bean Factory는 SpringContainer의 최상위 interface로 spring bean 을 관리 및 조회하는 역할을 한다.
BeanFactory를 기반으로 ApplicationContext에 추가된 부가기능으로는 환경변수 관련 처리, Application의 event를 발생시킬 수 있으며, 다양한 리소스를 읽는 등 여러 기능이 존재한다.
Application Context가 bean요청을 처리하는 과정
0. application context는 @configuration 이 붙은 class는 설정파일 정보로, @Bean, @Component가 붙은 method는 method 이름으로 bean 목록을 작성한다.
1. client가 특정 bean을 요청한다.
2. application context는 현재 등록된 bean 목록에서 해당 이름의 bean이 존재하는지 확인한다.
3. application context는 설정 class로부터 bean 생성 요청 및 생성된 bean객체를 반환한다.
Application Context를 사용하여 SpringFramework가 얻는 장점
. @Configure Annotation을 통해 설정과 관련된 class를 구분, 관리할 수 있다.
. 설정 class를 구분함으로써 client는 구체적인 설정 class를 알 필요가 적어진다.
. Application Context를 통해서 전반적인 IOC 서비스를 제공할 수 있다.
. Application Contextㄹ르 통해서 다양한 Bean을 검색할 수 있다.
Spring ApplicationContext에 등록된 Bean
Application Context에 등록된 Bean의 경우 기본적으로 Singleton으로 관리된다.
Spring에서 여러 Bean을 요청할 시 모든 요청에 대해 활용되는 객체는 단일 객체이며,
이로 인해 여러번 요청이 오더라도 매 요청마다 새로운 Bean 객체를 생성하지 않고 단일 객체를 활용한다.
(MultiThread에서 해당 Bean을 공유한다고 한다.)
Java를 통해 직접 Singleton객체를 만들 때 단점은 아래와 같다.
. private 생성자를 지녀 상속이 불가능하다.
. server 환경에서는 singleton이 1개만 생성됨을 완벽히 보장하지 못한다.
. static 상태를 만들 수 있기때문에 객체지향적이지 못하다.
이에 반해서 Spring 이 직접 Singleton 객체를 만들고 관리하는데, 이를 Singleton Registry라고 부른다.
Singleton Registry의 장점은 아래와 같다.
. static method나 private 생성자 등을 사용하지 않아 좀더 객체지향적 개발이 가능하다.
. test를 하기에 편하다.
다만 Bean 객체 정의 시 주의할점이 존재한다
. Bean 객체가 singleton으로 관리되기 때문에 각 객체는 내부에 상태정보를 지니면 안된다.
-> stateless 를 유지해야 함.
-> multi thread 환경에서 특정 상태를 지니면 위험소지가 존재.
참고 포스트
. https://mangkyu.tistory.com/151
'SpringBoot' 카테고리의 다른 글
Spring에서의 IOC (0) | 2023.12.11 |
---|---|
IOC란 무엇인가? (0) | 2023.12.11 |
Bean과 Component (0) | 2023.11.30 |
SpringBoot와 SpringMVC의 차이와 특성에 대하여 (0) | 2023.11.29 |
@SpriongBootApplication 에 대해서 (0) | 2023.11.29 |