Spring Core - Context 2편에서 살펴보았듯이, ApplicationContext는 Context의 기능의 중심이다.
하지만 대체 어느 부분이 중심인 것일까?
장황하게 썼지만, Context에는 정확히 어떤 기능이 있는걸까?
이는 스프링 공식 문서 사이트에서 확인해 볼 수 있다.
이번 부록에서는 그 부분에 대해 우선 간략하게 알아보도록 하자.
공식 문서에 따르면 Application Context는 다음과 같은 특징을 지닌다.
- 애플리케이션을 설정하기 위한 중심
- 실행중에는 읽기 전용이므로 쓰고(write)싶다면 reload 해야 함
ApplicationContext는 최상위 인터페이스 이므로, 설정의 중심인 것은 말할 필요도 없다.
하지만 왜 실행중엔 읽기 전용인 걸까?
그것 역시 기능의 중심이기 때문이다.
실행 도중 설정 내용이 변경되 버린다면, 프로그램 흐름 또한 뒤틀릴 것이다.
Application Context의 기능에는 다음 6가지가 있다.
- BeanFactory 로서의 기능
- 파일 리소스를 일반적인 방식으로 로드하는 기능
- Environment 관련 기능
- 등록된 이벤트 리스너에게 이벤트를 발행하는 기능
- 다국화를 지원하여 메세지를 해석하는 기능
- 부모 Context로 부터 상속을 받음
BeanFactory는 앞서 자세히 설명했으니 넘어가고, 나머지는 무슨 뜻인지 살펴보자.
ResourceLoader란 Resource를 로드할 수 있는 기능을 말한다
Spring은 파일 리소스를 다룰 때, Resource를 생성하여 반환한다.
즉, SPring 에선 파일 리소스 = Resource라고 해도 좋다.
그렇다면 실제 파일들을 어떻게 Resource로 반환하느냐 인데, 그 역할을 하는 것이 바로 ResourceLoader이다.
ResourceLoader의 getResource(String path)라는 메소드로
작성한 path 경로상의 파일을 Resource로 불러올 수 있다.
파일 리소스는 그렇다 치고, 그럼 우리가 작성한 .proterties나 .yml 등의 설정 파일은 어떻게 되는걸까?
그것에 해당하는 것이 바로 Environment이다.
Environment는 말그대로 환경 설정에 관한 것으로
우리가 설정한 프로퍼티 파일을 가져오거나, 설정한 Profile을 적용하는 등의 역할을 담당한다.
이것도 말 그대로 이벤트를 발행하는 기능을 말한다.
이벤트를 발행하기 위해선 3가지가 필요한데,
이벤트 자체를 나타내는 Event 객체,
이벤트를 받아 지정된 행동을 하는 EventListener,
이벤트를 리스너에게 알리는 EventListenerPublisher 이다.
이벤트를 만들어 Publisher가 해당되는 모든 Listener에게 날리고,
Listener는 해당 이벤트를 받고 지정된 행동을 실시한다.
여기서 Publisher의 역할을 담당한다는 것이다.
메소드는 2가지가 있는데,
프레임워크나 애플리케이션 자체의 이벤트를 받는 메소드와, 일반적인 이벤트를 받는 메소드가 존재한다.
이어서 >>>