簡體   English   中英

如何在Spring Boot中獲取DispatcherServeletInitializer功能

[英]How to get DispatcherServeletInitializer functionality in Spring Boot

我們希望將項目遷移到Spring Boot。 但是,目前還不清楚如何在Spring Boot中復制AbstractAnnotationConfigDispatcherServletInitializer的功能?

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
@Override
protected Class<?>[] getRootConfigClasses()
{
    return new Class<?>[]{AppConfig.class};
}

@Override
protected Class<?>[] getServletConfigClasses()
{
    return new Class<?>[]{WebappConfig.class};
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
    registration.setAsyncSupported(true);
}

@Override
protected String[] getServletMappings()
{
    return new String[]{"/"};
}

@Override
protected Filter[] getServletFilters()
{
    DelegatingFilterProxy shiroFilter = new DelegatingFilterProxy("shiroFilter");
    shiroFilter.setTargetFilterLifecycle(true);

    CompositeFilter compositeFilter = new CompositeFilter();
    compositeFilter.setFilters(ImmutableList.of(new CorsFilter(),shiroFilter));

    return new Filter[]{compositeFilter};
}

}

AppConfigWebappConfig父/子關系可辦理SpringApplicationBuilder ,雖然您也可以考慮一個平面層次結構。

假設您正在進行整個生長,並運行嵌入式servlet容器,您可以直接將FiltersServlets注冊為bean。

如果需要設置setAsyncSupported等內容,也可以使用ServletRegistrationBeanFilterRegistrationBean 最后一個選項是添加一個實現org.springframework.boot.context.embedded.ServletContextInitializer的bean,然后自己進行注冊。

這樣的事情可能會讓你更進一步:

@Bean
public ServletRegistrationBean dispatcherServlet() {
    ServletRegistrationBean registration = new ServletRegistrationBean(
            new DispatcherServlet(), "/");
    registration.setAsyncSupported(true);
    return registration;
}

@Bean
public Filter compositeFilter() {
    CompositeFilter compositeFilter = new CompositeFilter();
    compositeFilter.setFilters(ImmutableList.of(new CorsFilter(), shiroFilter));
    return compositeFilter
}

另外,請參閱參考手冊http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container中的這一部分。

沒有什么特別的,比如用AppInitializer注釋標記你的AppInitializer

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
...
}

我沒有嘗試過,但只是結合了文檔:

通常,現有WebApplicationInitializer中的所有代碼都可以移動到SpringBootServletInitializer中。 如果您的現有應用程序具有多個ApplicationContext(例如,如果它使用AbstractDispatcherServletInitializer),那么您可以將所有上下文源壓縮到單個SpringApplication中。

SpringBootServletInitializer JavaDocs:

如果您的應用程序更復雜,請考慮使用其他WebApplicationInitializers。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM