우선 Context의 구조부터 알아보자.
Context는 종류도 많고 구조도 굉장히 복잡하다.
따라서 2가지만을 살펴보도록 하겠다.
이번 편은 일반 애플리케이션용 Context를 알아보자.
스프링 Context 기능의 중심인 최상위 인터페이스이다.
거의 스프링 Context는 얘를 구현하며, 기능에 따라 앞에 "~~ApplicationContext"라고 붙는다.
0번은 기능의 중심 역할을 한다면, 일은 결국 얘가 다 한다.
ApplicationContext을 구현한 추상 클래스로, 내부에 정의된 특수한 Bean들을 등록할 수 있다.
(spring.io에 나와있긴 한데, specific Bean이 뭔진 잘 모르겠다ㅠㅜ)
이름부터 제너릭이듯, Context로서의 기능을 거의 다 갖고있다.
주로 수동으로 직접 Bean을 등록할 때 사용한다.
XmlBeanDefinitionReader를 사용하여 xml 파일을 읽어와야 한다.
등록 과정이 좀 번거롭다.
(사용법은 여기서)
Bean을 배울 때 보통 가장 먼저 사용하는 인터페이스이다.
위의 1번을 확장한 인터페이스로, Context 등록 과정이 간편화 되었다.
1번과 달리 xml 파일을 읽어오는 과정이 내부에 있으며, 다양한 루트로 설정 파일을 불러올 수 있다.
ApplicationContext context = new GenericXmlApplicationContext("springtest/User/test.xml");
TestBean testBean = context.getBean("testBean");
3번과 비슷하지만, 클래스 경로로 Context를 불러오는데 특화되어 있다.
// TestBean 클래스의 패키지 경로에 있는 test.xml을 불러온다는 뜻
ApplicationContext context = new ClassPathXmlApplicationContext("test.xml", TestBean.class);
훨씬 단축된 길이로 불러올 수 있다.
말 그대로 클래스 경로가 아닌 실제 파일 경로로 불러온다.
// TestBean 클래스의 패키지 경로에 있는 test.xml을 불러온다는 뜻
ApplicationContext context = new ClassPathXmlApplicationContext("/src/main/webapp/WEB-INF/springtest/User/test.xml");
쓸데없이 길기도 하고, 파일 경로가 그대로 드러나는 것도 보기 안좋기 때문에, ClassPath를 사용하는 것을 권장한다.
생각보다 내용이 조금 길어지는 것 같다.ㅎㅎ
다음 편에선 Web 애플리케이션용 Context에는 뭐가 있는지 알아보자.