本文共 1907 字,大约阅读时间需要 6 分钟。
比如万能的helloworld:
我们只要写一个controller就能自动映射到。访问localhost:8080/hello,如下
那么springboot是如何帮助我们自动配置的呢?对于springmvc的自动配置全部在WebMvcAutoConfiguration.class类中。
ctrl+n搜索类,进入:
看到如下关键方法:
首先webjars是什么呢?
看官网的描述: 其实说白了,就是讲静态资源通过jar包的方式导入进来。那么我们看看springboot是如何配置webjars的。
if (!registry.hasMappingForPattern("/webjars/**")) { customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/") .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl)); }
关于webjars,会自动帮我们添加一个映射。对于/webjars/**这样的资源回去类路径下的?META-INF/resources/webjars/路径下面去找。
并且可以设置缓存时间,而缓存时间是从ResourceProperties下面去找的。 关于ResourcesProperties我们可以从配置文件的spring.resources前缀的属性注入进来。这样在浏览器访问localhost:8080/webjars/**这个路径就会通过根路径的respurces/webjars/**这个路径来寻找。
比如:我们导入jquery的一个jar包: 只要导入进来,我们就可以通过访问localhost:8080/webjars/jquery/3.3.1/jquery.js来访问了,如下图所示:那么我们编写的静态资源应该放到哪里才可以被访问到呢,比如下面的ilogin.html
再来看springboot的自动配置:
那我们点进去看一下这是给我们配置到哪里去了呢? 经过一路跟踪,终于找到,springboot为我们自动配置的静态资源位置是如下几个:classpath:/MATA-INF/resources/、classpath:/resources/、classpath:/public/、classpath:/static/这几个位置,无论我们把静态资源放到这几个的哪一个都可以访问到: 通过测试abcd四个html都能被访问到。对于欢迎页的配置,springboot又是如何自动配置的呢?
还是进入WebMvcAutoConfiguration.class这个类: 进入这个构造方法里边, 观察这个类的注释:支持静态资源和模板文件,但是更喜欢静态资源。也就是我们无论是吧index.html页面放到静态资源文件夹下,还是放在templates文件夹下都可以被访问到,但是如果两个路径下都包括index.html,那么优先加载静态资源下的index。
如何全面接管springmvc呢,我们只要在一个组件上面加上@EnableWebMvc注解就行。
这样springboot为我们做的mvc自动配置全部都会失效,只会保留最初始的功能。
如下所示: 这样如果我们在访问webjars,比如:http://localhost:8080/webjars/jquery/3.3.1/jquery.js 就不能访问到了。为什么只要添加一个注解就不能访问到了呢?
可以进这个注解看一下: 这个注解很简单,就是向容器中导入了一个组件,那我们点进去看一下: 我们可以看到这个类继承了WrbConfigurationSupport这个类,再看看mvc的自动配置类: mvc的自动配置类会判断在没有这个组件的情况下,才会生效也就是说我们使用了这个@EnableWebMvc注解,就会使springboot自动配置的mvc失效。
转载地址:http://lmqrn.baihongyu.com/