springBoot中springMVC的配置类编写

我们在创建springBoot时,由于勾选了web依赖,里面的springMVC的基本配置已经自动配好了。但是当我们想在配置里面再加什么的时候,由于没有springMVC.xml的配置文件了(比如我们再写国际化时,要在springMVC.xml中配置拦截器LocaleCHangeInterceptor与解析器SessionLocaleResolver,当springMVC的核心控制器dispatcherServlet被加载时,拦截器和解析器都要被实例化出来),所以我们就要写配置类,要把这些bean都生成在spring中applicationContext应用上下文去。

然后,我们可建立个conf的目录,在里面建立个WebConfig.class

这个webConfig需要把拦截器与解析器都生成出来,放到spring的bean容器中来,所以他要继承WebMvcConfigurationSupport(对springMVC支持的类),同时这个类要加上@Configuration的注解,这就意味着,这个配置类里面的内容会在项目加载时读取生成


package com.yy.springbootdemo2.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

import java.util.Locale;

@Configuration
//配置类(向项目里面添加一些配置的bean实例时用到)
public class WebConfig extends WebMvcConfigurationSupport{

    @Bean
    //方法的返回值是bean容器的实例
    public LocaleResolver localeResolver(){      //LocaleResolver是一个父接口,方法的返回值只能定成这个名字,以前写springMVC.xml时id必须写localeResolver是一个道理,如果改成别的名字,DispacherServlet就没办法加载它
        CookieLocaleResolver localeResolver=new CookieLocaleResolver();     //CookieLocalResolver与SessionLocaleResolver类似
        localeResolver.setDefaultLocale(Locale.CHINA);  //设置默认的语言种类
        localeResolver.setCookieMaxAge(3600);           //失效
        return localeResolver;
    }

    @Bean
    public LocaleChangeInterceptor interceptor(){ //方法名不重要,但方法的返回值是不能随意取
        return new LocaleChangeInterceptor();
    }

    //继承了WebMvcConfigurationSupport,所以要重写两个方法
    //除了有拦截器实例,还要把实例加载到拦截器栈里面去
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        //添加配置的语言变化拦截器
        registry.addInterceptor(interceptor());
    }

    //因为配置了拦截器,所以springMVC的dispatcherServlet就会启动,原来静态资源加载就会出问题了
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //处理静态资源访问
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");   //根目录下的任何静态资源被请求时,都到/static/目录下去找静态资源
        super.addResourceHandlers(registry);    //registry要加载父类的registry里面
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36582604/article/details/80906114