简体   繁体   English

如何在Spring Boot中获取DispatcherServeletInitializer功能

[英]How to get DispatcherServeletInitializer functionality in Spring Boot

We are looking to migrate our project to Spring Boot. 我们希望将项目迁移到Spring Boot。 However it is unclear how to replicate the functionality of AbstractAnnotationConfigDispatcherServletInitializer in 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};
}

} }

The AppConfig and WebappConfig parent/child relationship can be handled by SpringApplicationBuilder , although you might also consider a flat hierarchy. AppConfigWebappConfig父/子关系可办理SpringApplicationBuilder ,虽然您也可以考虑一个平面层次结构。

Assuming that you are going the whole hog, and running an embedded servlet container you can register Filters and Servlets directly as beans. 假设您正在进行整个生长,并运行嵌入式servlet容器,您可以直接将FiltersServlets注册为bean。

You can also use ServletRegistrationBean and FilterRegistrationBean if you need to set things such as setAsyncSupported . 如果需要设置setAsyncSupported等内容,也可以使用ServletRegistrationBeanFilterRegistrationBean The final option is to add a bean that implements org.springframework.boot.context.embedded.ServletContextInitializer then do the registration yourself. 最后一个选项是添加一个实现org.springframework.boot.context.embedded.ServletContextInitializer的bean,然后自己进行注册。

Something like this might get you a bit further: 这样的事情可能会让你更进一步:

@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
}

Also, take a look at this section in the reference manual http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container 另外,请参阅参考手册http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container中的这一部分。

Well there is nothing special like just mark your AppInitializer with Boot annotations: 没有什么特别的,比如用AppInitializer注释标记你的AppInitializer

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

I haven't tried it, but just combined the documentation: 我没有尝试过,但只是结合了文档:

Normally all the code from an existing WebApplicationInitializer can be moved into a SpringBootServletInitializer. 通常,现有WebApplicationInitializer中的所有代码都可以移动到SpringBootServletInitializer中。 If your existing application has more than one ApplicationContext (eg if it uses AbstractDispatcherServletInitializer) then you might be able to squash all your context sources into a single SpringApplication. 如果您的现有应用程序具有多个ApplicationContext(例如,如果它使用AbstractDispatcherServletInitializer),那么您可以将所有上下文源压缩到单个SpringApplication中。

And SpringBootServletInitializer JavaDocs: SpringBootServletInitializer JavaDocs:

If your application is more complicated consider using one of the other WebApplicationInitializers. 如果您的应用程序更复杂,请考虑使用其他WebApplicationInitializers。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM