복붙노트

[SPRING] AbstractAnnotationConfigDispatcherServletInitializer와 WebApplicationInitializer를 사용할 때?

SPRING

AbstractAnnotationConfigDispatcherServletInitializer와 WebApplicationInitializer를 사용할 때?

나는 Spring 4.0.7과 함께 일하고있다.

JavaConfig를 통해 Spring MVC를 설정하는 방법에 대한 연구를했습니다.

실제로 어제까지이 두 옵션을 사용하여 두 가지 구성을 보았습니다.

참고 : (2)는 확장 용 클래스와 구현 용 클래스의 두 클래스입니다.

내가 컨버터, 포매터, 리소스 핸들러 등을 구성 할 수있는 많은 예제를 발견했기 때문에 (2)를 사용하고있다.

하지만 최근에 나는 StackOverflow에 대한 질문을 돕기 위해 노력했으며 (1) 존재한다는 것을 깨달았다. 나는 (1)에 대한 Google 개요를 작성했으며 (1)

내 질문은이 게시물의 제목이 설명하는 방법입니다.

고맙습니다

해결법

  1. ==============================

    1.Servlet 3.0 사양이 발표됨에 따라 (거의) xml이없는 서블릿 컨테이너를 구성 할 수있게되었습니다. 이를 위해 Servlet 사양에는 ServletContainerInitializer가 있습니다. 이 클래스에서는 web.xml에서 전통적으로하는 것처럼 필터, 리스너, 서블릿 등을 등록 할 수 있습니다.

    Servlet 3.0 사양이 발표됨에 따라 (거의) xml이없는 서블릿 컨테이너를 구성 할 수있게되었습니다. 이를 위해 Servlet 사양에는 ServletContainerInitializer가 있습니다. 이 클래스에서는 web.xml에서 전통적으로하는 것처럼 필터, 리스너, 서블릿 등을 등록 할 수 있습니다.

    Spring은 WebApplicationInitializer 클래스를 처리하는 방법을 알고있는 SpringServletContainerInitializer 구현을 제공한다. Spring은 또한 여러분의 삶을 편하게하기 위해 몇 가지 기본 클래스를 제공하여 AbstractAnnotationConfigDispatcherServletInitializer가 그 중 하나이다. 등록 ContextLoaderListener (선택 사항) 및 DispatcherServlet을 사용하면 두 클래스에 대해로드 할 구성 클래스를 쉽게 추가하고 DispatcherServlet에 필터를 적용하고 서블릿 매핑을 제공 할 수 있습니다.

    WebMvcConfigurerAdapter는 Spring MVC 구성을위한 DispatcherServlet에 의해로드 된 xml 파일을 대체하는 Spring MVC 구성을위한 것입니다. @Configuration 클래스에는 WebMvcConfigurerAdapter를 사용해야합니다.

    @Configuration
    @EnableWebMvc
    public class WebConfiguration 
        extends WebMvcConfigurerAdapter implements WebApplicationInitializer
    { ... }
    

    나는 기본적으로 서로 다른 두 가지 관심사이므로 혼합하는 것을 권장하지 않습니다. 첫 번째는 서블릿 컨테이너를 설정하는 것이고, 후자는 Spring MVC를 설정하는 것이다.

    그것들을 2 개의 클래스로 나누고 싶을 것입니다.

    구성의 경우.

    @Configuration
    @EnableWebMvc
    public class WebConfiguration extends WebMvcConfigurerAdapter { ... }
    

    응용 프로그램을 부트 스트랩하는 경우.

    public class MyWebApplicationInitializer
        extends AbstractAnnotationConfigDispatcherServletInitializer
    {
    
        protected Class<?>[] getRootConfigClasses() {
            return new Class[] {RootConfig.class};
        }
    
        protected Class<?>[] getServletConfigClasses()  {
            return new Class[] {WebConfiguration .class};
        }
    
        protected String[] getServletMappings() {
            return new String[] {"/"};
        }
    
    }
    

    추가 된 장점은 DispatcherServlet 및 / 또는 ContextLoaderListener를 수동으로 구성하는 대신 Spring에서 제공하는 편의 클래스를 사용할 수 있다는 것입니다.

  2. ==============================

    2.서블릿 컨테이너가 시작되는 방법을 처음부터 살펴볼 가치가 있습니다.

    서블릿 컨테이너가 시작되는 방법을 처음부터 살펴볼 가치가 있습니다.

    그래서 SpringServletContainerInitializer는 WebApplicationInitializer를 구현하는 올바른 클래스를 찾아야합니다. 두 가지 방법으로 문제를 해결할 수 있습니다.

    또한 WebMvcConfigurerAdapter가 WebApplicationInitializer와 혼동되어서는 안된다는 사실을 강조하고 싶습니다. 이름에서 알 수 있듯이 "Mvc"구성과 관련이 있습니다. WebMvcConfigurer에서 비어있는 메소드를 구현하는 어댑터 클래스입니다. @EnableWebMvc 주석을 사용하여 Mvc 컨트롤러를 구성 할 때이를 사용합니다.

    희망이 도움이됩니다.

  3. from https://stackoverflow.com/questions/26676782/when-use-abstractannotationconfigdispatcherservletinitializer-and-webapplication by cc-by-sa and MIT license