【SpringBoot3】实现自定义配置——以静态资源自定义配置为例(源码+代码示例)

这里写目录标题

  • [1 配置类位置](#1 配置类位置)
  • [2 静态资源配置方式](#2 静态资源配置方式)
  • [3 整体配置示例](#3 整体配置示例)
    • [3.1 创建配置类](#3.1 创建配置类)
    • [3.2 实现配置方法](#3.2 实现配置方法)
    • [3.3 指定配置文件属性](#3.3 指定配置文件属性)

1 配置类位置

  • 在左侧搜索autoconfigure可以找到·spring-boot-autoconfigure包,打开其下的META-INF -> spring -> AutoConfiguration.imports`
  • 里面是SpringBoot启动会默认加载 142个配置类,但是其实并不是所有的配置类都会生效,会根据注解@ConditionOnXXX,按需生效
  • ctrl点击进入其中的org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
  • 其中的WebMvcAutoConfigurationAdapter实现了WebMvcConfigurerWebMvcConfigurer提供了配置SpringMVC底层的所有组件入口


alt+7 可以获得接口定义的所有的方法

2 静态资源配置方式

  • application.properties或者application.yaml中增加配置。因为WebMvcAutoConfigurationAdapter上的注解@EnableConfigurationProperties({ WebMvcProperties.class, WebProperties.class })因此选择在这两个文件中找配置的属性
  • 其中, WebMvcProperties定义的属性以spring.mvc为开头
  • WebProperties定义的属性以spring.web为开头

3 整体配置示例

3.1 创建配置类

创建一个配置类,通常使用 @Configuration 注解标记,并在该类中定义配置方法。

java 复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CustomWebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 配置自定义的静态资源路径,例如将所有访问路径以 "/my-resources/" 开头的请求映射到 "classpath:/my-static-resources/"
        registry.addResourceHandler("/my-resources/**")
                .addResourceLocations("classpath:/my-static-resources/");
    }
}

在这个例子中,CustomWebMvcConfig 类实现了 WebMvcConfigurer 接口,覆盖了其中的 addResourceHandlers 方法,用于配置自定义的静态资源路径。

3.2 实现配置方法

在配置类中定义用于自定义静态资源配置的方法,使用 addResourceHandlers 方法。如果你希望将自定义的配置放在application.properties 中,可以使用 @Value 注解注入属性值,例如:

java 复制代码
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CustomWebMvcConfig implements WebMvcConfigurer {

    @Value("${custom.static.resource.path}")
    private String customStaticResourcePath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/my-resources/**")
                .addResourceLocations(customStaticResourcePath);
    }
}

3.3 指定配置文件属性

如果需要,你可以在application.properties(或 application.yml)中定义一些属性,以便在配置类中引用(只是改值,也可以不写自己的配置类)。

  • spring.mvc: 静态资源访问前缀路径
  • spring.web
    • 静态资源目录
    • 静态资源缓存策略

application.properties如下设置:

properties 复制代码
#1、spring.web:
# 1.配置国际化的区域信息
# 2.静态资源策略(开启、处理链、缓存)

#开启静态资源映射规则
spring.web.resources.add-mappings=true

#设置缓存
spring.web.resources.cache.period=3600
##缓存详细合并项控制,覆盖period配置:
## 浏览器第一次请求服务器,服务器告诉浏览器此资源缓存7200秒,7200秒以内的所有此资源访问不用发给服务器请求,7200秒以后发请求给服务器
spring.web.resources.cache.cachecontrol.max-age=7200
## 共享缓存
spring.web.resources.cache.cachecontrol.cache-public=true
#使用资源 last-modified 时间,来对比服务器和浏览器的资源是否相同没有变化。相同返回 304
spring.web.resources.cache.use-last-modified=true

#自定义静态资源文件夹位置
spring.web.resources.static-locations=classpath:/a/,classpath:/b/,classpath:/static/

#2、 spring.mvc
## 2.1. 自定义webjars路径前缀
spring.mvc.webjars-path-pattern=/wj/**
## 2.2. 静态资源访问路径前缀
spring.mvc.static-path-pattern=/static/**
相关推荐
VX:Fegn089513 小时前
计算机毕业设计|基于ssm + vue超市管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·课程设计
徐徐同学13 小时前
cpolar为IT-Tools 解锁公网访问,远程开发再也不卡壳
java·开发语言·分布式
Mr.朱鹏14 小时前
Nginx路由转发案例实战
java·运维·spring boot·nginx·spring·intellij-idea·jetty
VX:Fegn089515 小时前
计算机毕业设计|基于springboot + vue酒店管理系统(源码+数据库+文档)
vue.js·spring boot·课程设计
白露与泡影16 小时前
2026版Java架构师面试题及答案整理汇总
java·开发语言
历程里程碑16 小时前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
qq_2290580116 小时前
docker中检测进程的内存使用量
java·docker·容器
我真的是大笨蛋16 小时前
InnoDB行级锁解析
java·数据库·sql·mysql·性能优化·数据库开发
钦拆大仁16 小时前
Java设计模式-单例模式
java·单例模式·设计模式
小手cool17 小时前
在保持数组中对应元素(包括负数和正数)各自组内顺序不变的情况下,交换数组中对应的负数和正数元素
java