SpringBoot-03-开发技巧 & 静态资源处理
一些开发技巧
Lombok 简化
引入 Lombok 依赖:
1 | <dependency> |
Lombok 主要解决 Bean 的臃肿问题,需要注意的是 Lombok 无法生成多种参数的构造器:
1 | // 注解在类或字段,注解在类时为所有字段生成 setter 方法,注解在字段上时只为该字段生成 setter 方法。 |
还可以注入日志:
1 | //引入日志 |
Lombok 本质上就是一个实现了 “JSR 269 API” 的程序。在使用 javac 的过程中,它产生作用的具体流程如下:
- javac 对源代码进行分析,生成了一棵抽象语法树(AST)
- 运行过程中调用实现了 “JSR 269 API” 的 Lombok 程序
- 此时 Lombok 就对第一步骤得到的AST进行处理,找到 @Data 注解所在类对应的语法树(AST),然后修改该语法树(AST),增加 getter 和 setter 方法定义的相应树节点
- javac 使用修改后的抽象语法树(AST)生成字节码文件,即给 class 增加新的节点(代码块)
Dev-Tools
这个工具主要是解决热更新的问题(其实就是重启),引入依赖之后,按 Ctrl+F9 来更新页面。
1 | <dependency> |
Spring init
在创建项目的时候选择 Spring 项目,然后勾选所需要的组件,IDEA 会自动加载所有的依赖,并创造出完整的目录结构。
application.yaml
application.yaml 是和 application.properties 作用都是完全一样的,不过 yaml 语法格式有点区别。
yml/yaml 是一种类似于 json 的数据保存格式,它的表示形式是 key: value
记得中间有个空格,它的包含关系是通过缩进来解决的,类似于 Python。
基本值
基本值支持一下:
1 | # 整形 int |
对象
当内容为对象的时候,比如 Bean,Map 的时候,可以新增一个层级写多行 key: value
,或者使用 json 的大括号格式写成一行 {key: value,key: value}
逗号隔开,需要空格。
1 | user: |
数组列表
同样是两种,多行格式开头没了 key,用 -
表示新的一行开头,或者用单行写法:[XXX,XXX,XXX]
1 | pet: |
小例子:
1 |
|
1 | test: |
成功完成 yaml 版本的自动配置:
Test(name=Xorex, alive=true, age=18, address=Address(userName=Xorex, address=[ChengDu, SiChuan, China]), interests=[Sing, jump, Rap, Basketball], level=[1, 2, 3, 4, 5, 6], score={Chinese=59, Math=100, English=100}, user=User(userName=Xorex, password=123456))
静态资源映射
静态资源文件夹
SpringBoot 是使用 ResourceHttpRequestHandler 来处理请求的,对于一个请求来说,如果 Controller 可以处理,就会交给它,不能处理的则会会依次从 META-INF/resources
、/resources
、 /static
和 /public
按照请求的静态文件名从里面找同名的静态文件。
这四个文件夹都可以放静态文件,同名文件的优先级顺序为上面的排列顺序,从源码中也可以看出来:
1 | private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}; |
修改静态资源文件夹映射路径
是路径和文件夹的映射,以前四个文件夹是映射到根目录的,现在可以通过在配置中设置:
1 | spring: |
这样访问静态资源需要在原本路径下前面提娜佳 /res/
的 pattern 才可以访问。
修改静态资源文件夹
当我们在配置中设置 static-locations 这一项之后,原本的四大静态资源文件夹只会保留一个 META-INF/resources
毕竟是 JavaWeb 原生的东西肯定会保留(剩下三个会被取消),但访问优先级会下降到最低。而新配置的文件夹优先级按照配置顺序来。
1 | spring: |
Webjar
Webjar 是指 SpringBoot 将前端所需依赖会打包成一个 Webjar 来供你使用,而我们下载之后的 Webjar 包里面的内容的访问路径则是 /webjars/**
,比如我们引入 jQuery 的 Webjar:
1 | <dependency> |
然后可以看到已经下载过的 jQuery,可以看到是放在 /META-INF/resources/webjars/
下面的,这也是为什么修改 static-locations 之后,还保留 /META-INF/resources
,并且 webjar 的内容访问路径为 /webjars/**
了:
对应源码地方就是:
1 | this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/"); |
然后访问 http://localhost:8080/res/webjars/jquery/3.5.1/jquery.js
成功!
欢迎页
对于官方的欢迎页的设置来说,可以用 index.html
的文件名放到静态资源文件夹里面,这样直接访问主机名就可以看到 index.html
,但是这个时候是不可以配置静态资源访问前缀的,也就是 static-path-pattern
,不然就会失效,理由如下:
1 | WelcomePageHandlerMapping(TemplateAvailabilityProviders templateAvailabilityProviders, |
想要实现就只能通过 Controller 映射 /
页面转发到 index.html
了。
favicon.ico
配置网页小图标只需要将文件命名为 favicon.ico
然后放到静态资源目录即可,这个生效也不能配置 static-path-pattern。
这是因为浏览器获取小图标的方式就是访问 网页根目录+favicon.ico
更改了 static-path-pattern 之后也自然无法找到小图标了。