springboot挂载多个WebMvcConfigurationSupport不起作用解决
问题:在springboot中使用多个继承WebMvcConfigurationSupport的类是行不通的,而且使用注解@configuration去加载配置类只能挂载一个继承WebMvcConfigurationSupport,如果有多个而且在不同级包中,那么会优先加载最外层包的配置类,其他继承WebMvcConfigurationSupport的类是不会加载,原因:WebMvcConfigurationSupport调用模板类resourceHandlerMapping生成bean,其实是调用父类的模板类,去加载下一个发现已经有了就不会调用resourceHandlerMapping(bean的id相同).
解决办法:都实现父类 webMvcConfigurer 接口 ,这样都能挂载
package com.win.hehui.sys.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.List; @Order(2) @Configuration public class UrlMatchConfig implements WebMvcConfigurer { // @Override // public void configurePathMatch(PathMatchConfigurer configurer) { // // setUseSuffixPatternMatch 后缀模式匹配 // configurer.setUseSuffixPatternMatch(true); // // setUseTrailingSlashMatch 自动后缀路径模式匹配 // configurer.setUseTrailingSlashMatch(true); // } // // /** // * 设置匹配*.action后缀请求 // * // * @param dispatcherServlet // * @return // */ // @Bean // public ServletRegistrationBean servletRegistrationBean(DispatcherServlet dispatcherServlet) { // ServletRegistrationBean servletServletRegistrationBean = new ServletRegistrationBean(dispatcherServlet); // // 参数接受可变类型的多个参数支持多种后缀的匹配 // servletServletRegistrationBean.addUrlMappings("*.action", "*.do"); // return servletServletRegistrationBean; // } // // @Override // protected void addResourceHandlers(ResourceHandlerRegistry registry) { // registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); // } @Autowired private UserMethodArgumentResolver userMethodArgumentResolver; /** * 参数解析器 * * @param argumentResolvers */ @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(userMethodArgumentResolver); System.out.println("3====================addArgumentResolvers==========================="); } }
注意: 如果一个实现父类(webMvcConfigurer),继承子类(WebMvcConfigurationSupport),那么会优先加载子类,父类不会加载......