我们正在寻求将我们的项目迁移到 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};
}
最佳答案
AppConfig
和 WebappConfig
父/子关系可以由 SpringApplicationBuilder
处理,尽管您也可以考虑平面层次结构。
假设您正在全力以赴,并运行一个嵌入式 servlet 容器,您可以将 Filters
和 Servlet
直接注册为 beans。
如果您需要设置诸如 setAsyncSupported
之类的内容,您还可以使用 ServletRegistrationBean
和 FilterRegistrationBean
。最后一个选项是添加一个实现 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
关于java - 如何在 Spring Boot 中获取 Dispatcher Servlet Initializer 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22869901/