SpringBoot(3)配置相关、thymeleaf模板引擎及整合MVC

本文详细介绍了SpringBoot配置文件的优先级顺序,包括多环境配置的使用。接着讲解了thymeleaf模板引擎的基本操作。此外,还讨论了Spring Boot如何整合Spring MVC,包括端口配置、静态资源访问以及拦截器的配置和使用。通过源码分析,揭示了Spring Boot自动配置的原理和自定义配置的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.配置文件的优先级顺序:

在这里插入图片描述
最高的是项目文件路径下的config中的配置文件,其次是项目文件下的配置文件,其次是类路径下的config,最后是我们的默认路径!
springboot的多环境配置
多个yml配置文件;在spring boot中是被允许的。这些配置文件的名称必须为application-***.yml,并且这些配置文件必须要在application.yml配置文件中激活之后才可以使用。

#激活配置文件;需要指定其它的配置文件名称
spring:
  profiles:
    active: **,**

除此之蛙,多环境可以写在一个配置文件内,使用- - -分开!比如:(配置多的情况下不建议使用!)
在这里插入图片描述

配置文件能配置那些

配置文件能配置的东西,都存在一个固有的规律:
在spring.factories中,有许多的xxxAutoConfiguration。xxxAutoConfiguration有默认值,如果需要修改的话,就按照规则配置yaml文件!
在这里插入图片描述
在这里插入图片描述
xxxAutoConfiguration将xxxProperties装配,然后xxxProperties就和我们的配置文件绑定。

总结

根据当前不同的条件判断,决定这个配置类是否生效!一旦这个配置类生效;这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的。

因此我们可以从上一篇文章和这里得出:
自动装配的原理(精髓)

  • SpringBoot启动会加载大量的自动配置类
  • 我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
  • 我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
  • 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
  • xxxxAutoConfigurartion:自动配置类;给容器中添加组件
  • xxxxProperties:封装配置文件中相关属性;
    我们可以通过在配置文件中配置:debug: true开启自动配置类是否生效的日志输出!

thymeleaf模板引擎(了解)

1.添加依赖

     <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-java8time</artifactId>
        </dependency>

2.通过查看源码我们可以发现:
在这里插入图片描述
2.1 所有的thymeleaf模板引擎都放在templates这个文件下,其次文件的后缀名是以。html结尾的。
在这里插入图片描述

Spring Boot整合Spring MVC端口和静态资源

目标:可以修改tomcat的端口和访问项目中的静态资源。

  • 修改tomcat端口

    查询**Properties,设置配置项(前缀+类变量名)到application配置文件中。

#tomcat端口修改
server:
  port: 80
  • 访问项目中的静态资源

静态资源放置的位置;放置静态资源并访问这些资源。
存放静态资源的位置通过源代码可以得知有以下4个路径:
在这里插入图片描述
优先级:resources > static(默认的)>public

Spring Boot整合Spring MVC拦截器

目标:可以在Spring Boot项目中配置自定义SpringMVC拦截器

分析

  1. 编写拦截器(实现HandlerInterceptor);
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
public class Interceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       log.debug("这是Interceptor的 preHandle方法");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.debug("这是Interceptor的 PostHandle方法");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.debug("这是Interceptor的 afterHandle方法");
    }
}

没有业务;因此使用日志来记录信息。
2. 编写配置类实现 WebMvcConfigurer,在该类中添加各种组件;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    //注册拦截器
    @Bean
    public Interceptor interceptor(){
        return new Interceptor();
    }
    //添加拦截器到spring mvc拦截器链

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //拦截所以请求路径
        registry.addInterceptor(interceptor()).addPathPatterns("/*");
    }
}

  1. 测试

拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。(在SpringBoot官方文档中有以下说明:)
如果你想要保持Spring Boot的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器,视图控制器、消息转换器等等),你应该让一个类实现WebMvcConfigurer,并且添加@configuration注解,但是千万不要加@Enablewebwvc注解。如果你想要自定义HandlerMapping、HandlerAdapter .ExceptionReso1ver等组件,你可以创建一个webMvcRegistrationsAdapter实例来提供以上组件。如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@configuration注解和@EnablewebMvc注解。
通过源码可知:这个注解类导入的类DelegatingWebMvcConfiguration实现了WebMvcConfigurationSupport,而在WebMvcConfigurationSupport装配的时候做了判断,需要这个类不存在!否则默认配置都会失效!
在这里插入图片描述
在WebMvcAutoConfiguration中,
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值