六、SpringBoot 配置 SpringMVC

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/PZHU_CG_CSDN/article/details/81879260

1、扩展 SpringMVC

  编写一个配置 SpringMVC 的配置文件类,需要继承 WebMvcConfigurerAdapter,实现相应配置即可。


    //WebMvcConfigurerAdapter 来扩展 SpringMVC 的功能
    @Configuration
    public class MyConfig extends WebMvcConfigurerAdapter {
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            // super.addViewControllers(registry);
            registry.addViewController("/zc").setViewName("/success");
        }
    }


  也可以像下面这样写:


    //WebMvcConfigurerAdapter 来扩展 SpringMVC 的功能
    @Configuration
    public class MyConfig extends WebMvcConfigurerAdapter {    
        //将当前 WebMvcConfigurerAdapter 添加到 IOC 容器中。
        @Bean
        public WebMvcConfigurerAdapter webMvcConfigurerAdapter() {
            WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {
                @Override
                public void addViewControllers(ViewControllerRegistry registry) {
                    registry.addViewController("/").setViewName("login");
                    registry.addViewController("/index").setViewName("login");
                    registry.addViewController("/main.html").setViewName("dashboard");
                }

                @Override
                public void addInterceptors(InterceptorRegistry registry) {
                    //LoginHandleInterceptor 是自定义的拦截器,可以设置拦截器要拦截的路径以及不需要拦截的路径。(excludePathPatterns:不需要拦截的路径)
                    registry.addInterceptor(new LoginHandleInterceptor()).addPathPatterns("/**")
                            .excludePathPatterns("/index","/","/user/login");
                }
            };
            return  adapter;
        }
    }

容器中的 WebMvcConfigurer 会一起起作用,包括我们的配置类 WebMvcConfigurerAdapter 也会起作用。

2、全面接管 SpringMVC

SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己配置;所有的SpringMVC的自动配置都失效了


    //使用WebMvcConfigurerAdapter可以来扩展SpringMVC的功能
    //使用 @EnableWebMvc 来关闭对 SpringMVC 的自动配置
    @EnableWebMvc
    @Configuration
    public class MyMvcConfig extends WebMvcConfigurerAdapter {
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            //设置映射的路径
            registry.addViewController("/").setViewName("login");
            registry.addViewController("/index").setViewName("login");
            registry.addViewController("/main.html").setViewName("dashboard");
        }

        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoginHandleInterceptor()).addPathPatterns("/**")
                    .excludePathPatterns("/index","/","/user/login");
        }
    }

原理:

  为什么我们加了 @EnableWebMvc 自动配置就失效了?

1)、@EnableWebMvc的核心


    @Import(DelegatingWebMvcConfiguration.class) 
    public @interface EnableWebMvc {

2)、


    @Configuration 
    public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {

3)、


    @Configuration 
    @ConditionalOnWebApplication 
    @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class })          
    //容器中没有这个组件的时候,这个自动配置类才生效 
    @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) 
    @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) 
    @AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class })          
    public class WebMvcAutoConfiguration {

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class):当容器中没有这个组件时,自动配置才会生效,当我们手动添加这个组件到 IOC 容器中时,就自然不会再使用 SpringBoot对SpringMVC的自动配置。

同样,我们可以根据项目的需要在 application.properties(application.yml) 文件中去配置视图解析路径。


  spring:
    mvc:
      view:
        prefix: /WEB-INF/views/
        suffix: .jsp

猜你喜欢

转载自blog.csdn.net/PZHU_CG_CSDN/article/details/81879260