[F-Lab 모각코 챌린지] 27일차 - ApplicationContext 와 BeanDefinition 과정과 개념 추가 설명
F-Lab 모각코 챌린지 27일차 ApplicationContext 와 BeanDefinition 의 수행 과정과 개념을 공부하며 기록 한 내용입니다
![[F-Lab 모각코 챌린지] 27일차 - ApplicationContext 와 BeanDefinition 과정과 개념 추가 설명](/content/images/size/w1200/2023/06/-------_--------_-------21.png)
ApplicationContext
ApplicationContext 는 계층 구조를 가질 수 있다
ApplicationContext 끼리 상위-하위 계층 관계를 형성하여 여러개의 ApplicationContext 를 조합 할 수 있는 기능을 제공한다
계층 관계에서는 Root ApplicationC0ntext 가 존재한다
ApplicationContext 계층에서 가장 상위에 위치한 Context 이다.
이점
- 모듈화
ApplicationContext 는 독립적인 모듈 또는 하위 시스템을 나타낼 수 있다
각 모듈들은 자체적으로 빈을 정의하고 구성할 수 있으며 다른 모듈과 상호작용 할 수 있다 - 상속
하위 ApplicationContext 는 상위 ApplicationContext 의 설정을 상속받을 수 있다
하위 ApplicationContext 는 상위 Context 의 Bean 을 사용할 수 있지만, 반대로 상위 ApplicationContext 는 하위 Bean 을 사용 할 수 없다 - 독립적인 환경 구성
ApplicationContext 의 계층화로 인해 독립적인 환경 구성을 가질 수 있다
좋은 예로 개발 환경과 운영 환경을 나누어 각각의 ApplicationContext 를 생성하고 환경별로 다른 Bean 을 설정할 수 있다
Spring 은 왜 계층 형태로 만들었을까?
전체 애플리케이션에서 특정 기술에 의존적인 부분과 그렇지 않은 부분을 구별하기 위해
각 계층별로 다른 ApplicationContext 를 구성하여 사용할 수 있다
이는 Spring 을 포함한 특정 기술에 얽매이지 않는 구조를 만들기 위해 만들어졌다계층 형태로 컨텍스트를 구분하여 다른 의존성을 관리할 수 있다
BeanDefinition
이전 글에서 BeanDefinition 은 추상 정보라고 했다
BeanDefinition 에 존재하는 여러 내부 설정들도 이야기 했었는데, 이 클래스가 만들어지고 실행되는 순서는 다음과 같다
- Bean 대상 스캔
Bean 으로 조작 할 대상을 설정 정보를 통해 파악한다
대상으로는 특정 Spring 애노테이션(@Component, @Service, @Repository, @Controller...)이 붙어있는 클래스들이다 - Bean 의 인스턴스화
ApplicationContext 는 설정 정보를 기반으로 Bean 인스턴스를 생성한다
이 때 new 키워드가 동작하여 인스턴스를 생성하고 ApplicationContext 에 저장된다 - 의존성 주입 (Dependency Injection)
Bean 이 다른 Bean 에 의존하는 경우 의존성을 해결한다.
이 때 Spring 의 중요 기능 중 하나인 DI(Dependency Injection) 이 동작한다. - 초기화
의존성이 해결되면 초기화 작업을 수행한다.
이 과정 에서는 InitializingBean 인터페이스의 afterPropertiesSet() 메서드 또는 @PostConstruct 애노테이션이 지정된 메서드를 통해 Bean 을 초기화 한다.
이 단계에선 Bean 의 상태를 설정하거나 외부 리소스를 로드하는 등의 작업을 수행 할 수 있다.