1. ContextLoaderListener
1) Listener와 Root WebApplicationContext
2) config 설정법 종류
프롤로그
ApplicationContext 종류 요약
StaticApplicationContext :
빈 설정 메타정보를 담은 BeanDefinition 오브젝트를 이해하기 위해 존재. 컨테이너에서 빈 등록 방식을 확인하는 목적
GenericApplicationContext :
Xml을 리더기로 읽어서 BeanDefinition으로 변환해 사용, JUnit 테스트에서 사용
GenericXmlApplicationContext :
GenericApplicationContext에 XmlBeanDefinitionReader 내장한 Application Context
WebApplicationContext :
웹 환경에서 사용하기 위한 ApplicationContext
DispatcherServlet은 요청이 들어올 때마다 미리 생성한 WebApplicationContext에서 필요한 Bean을 불러오고 미리 지정한 메소드(Handler)를 호출한다.
스프링은 두 개의 WebApplicationContext를 구성한다.
ContextLoaderListener 에 의해 만들어지는 Root WebApplication Context
DispatcherServlet에 의해 만들어지는 WebApplicationContext
이 두 개는 Servlet Container에 있다.
Root Application Context
Root Application Context 등록은 Servlet의 이벤트 리스너 방식으로 이루어진다.
이벤트 리스너는 무엇인가?
이벤트가 발생했을 때 그 처리를 담당하는 함수를 의미한다. 이벤트 핸들러라고 한다.
지정된 타입의 이벤트가 특정요소에서 발생하면 그 요소에 등록된 이벤트 리스너를 실행한다.
스프링은 웹 애플리케이션 시작, 종료 이벤트에 대한 리스너로 ServletContextListener 인터페이스를 사용한다.
리스너가 서블릿 컨테이너의 시작과 종료를 주시한다.
즉, 이벤트 리스너 방식으로 Servlet Container(Tomcat)이 시작되거나 종료될 때
ServletContextListener 인터페이스의 contextInitialized(), contextDestroyed() 를 호출한다.
서블릿 컨테이너가 시작하면 contextInitialized( ) 실행하여 Root Aplication Context 생성 및 초기화.
서블릿 컨테이너가 종료하면 contextDestroyed( ) 실행하여 Root Aplication Context 종료.
스프링은 인터페이스인 ServletContextListener 구현체인 ContextLoaderListener가 있다.
리스너는 web.xml을 이용하여 설정한다.
Listener는 시작부터 종료까지 있는 특성이 있다. 그래서 웹 애플리케이션 전체에 적용 가능한
DB연결 기능 또는 로깅같은 기능을 제공하는데 유용하다.
ContextLoaderListener 구현체가 웹 애플리케이션이 시작/종료할 때
Root Application Context를 생성하고 종료하는데 사용되는 리스너 구현체이다.
Log4jConfigListener 구현체는 DB연결 기능이나 로깅을 위한 리스너 구현체이다.
web.xml과 root-context.xml을 이용하는 구현법
일반적으로 WEB-INF 디렉토리 안에 있는 applicationContext.xml 을 디폴트 설정파일을 사용하는데
web.xml에서 ContextLoaderListener 가 사용할 설정파일 위치를 파라미터 정보
<context-param> 태그로 전달하여 변경할 수 있다.
두 번째 방법. 자바 클래스 파일과 어노테이션을 이용법
WebApplicationInitializer를 이용하는 방법인데 web.xml 없이 servlet context를 초기화할 수 있는 방법이다.
순수 자바클래스와 어노테이션을 이용한 방법이다.
1. javax.servlet.ServletContainerInitializer 인터페이스를 구현한 클래스를 만든다.
2. 그리고 클래스 이름을 /META-INF/services/javax.servlet.ServletContainerInitializer라는 텍스트 파일에 적는다.
3. ServletContainerInitializer 구현 클래스 머리에 @HandleTypes 어노테이션으로 WebApplicationInitializer.class 를 지정한다.
4. WebApplicationInitializer 인터페이스를 구현한다.
5. WAS가 시작하면 이 클래스가 실행한다.
<< AnnotationConfigApplicationContext 이해 >>
AnnotationConfigApplicationContext 는 @Configuration 어노테이션을 붙은 클래스를 설정 정보로 사용하는 클래스.
변수 인터페이스는 ApplicationContext 라 두고 AnnotationConfigApplicationContext 객체를 생성하고 초기화하는데 특정 클래스를 매개변수에 입력.
이 클래스는 @Configuration 이 붙은 클래스여야 한다.
즉, ApplicationContext context= new AnnotationConfigApplicationContext([클래스이름].class)
이런 식~ 그리고 context에서 빈을 사용하고 싶을 때 context.getBean 이렇게 사용하면 된다.
세 번째 방법. web.xml에 Root Application Context 구현체 주입법
xml에 contextConfiguration 과 contextClass를 이용하는 방법인데 설정 자체는 자바 파일을 사용한다.
구현체로 설정 방법은 AnnotationConfigWebApplicationContext 클래스를 이용.
param-value 에 org.springframeork.context.annotaiton.AnnotationConfigApplicationContext 라고 입력
Root Application Context는 WebApplicationContext 인터페이스 구현체이다.
순수 자바파일 이용할 때는 AnnotationConfigWebApplicationContext 초기화 시 주입했지만
xml에 자바파일 이용할 때는 초기화하지 않아도 된다.
네 번째 방법. WebApplicationInitializer로 시작, 실제 설정은 xml파일.
어노테이션 작성만 유의.
https://offbyone.tistory.com/215
'컴퓨터공학 > Spring framework 분석' 카테고리의 다른 글
개념> Servlet Container (0) | 2021.12.28 |
---|---|
개념> DispatcherServlet과 WebApplicationContext (0) | 2021.12.22 |
개념> 스프링과 Application Context (0) | 2021.12.20 |