![](/img/trans.png)
[英]How to implement advanced search functionality in Spring MVC with Spring Boot?
[英]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};
}
}
在AppConfig
和WebappConfig
父/子关系可办理SpringApplicationBuilder
,虽然您也可以考虑一个平面层次结构。
假设您正在进行整个生长,并运行嵌入式servlet容器,您可以直接将Filters
和Servlets
注册为bean。
如果需要设置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中的这一部分。
没有什么特别的,比如用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.