1.0.0-项目搭建
SpringBoot项目搭建,可以利用SpringBoot官网搭建传统Maven项目:https://start.spring.io/
先选MavenProject,语言选Java,SpringBoot版本我这里是2.6.4,这个东西更新迭代很快,所以要赶紧学。Group是指组名,这里随便什么com.wzkang,Artiface是项目名字,Name和这个一样,不管先,然后Description默认,Package name先放着,打包方式选了Jar(内嵌Tomcat),还有个War利用Tomcat,Java版本这次选择的是8.选好这些后再选择插件,也就是旁边的Dependencies,添加个Spring Web,这样就会把什么Maven?和Tomcat?什么帮你搞完,算是环境的搭建吧。
最后再点GENERATE下载项目,一个zip包,解压后后用IDEA打开。
当然正常不会这样创建项目的吧。
这里来第二种正常的项目创建,利用IDEA直接创建。
IDEA—New Project—Spring Initializr这里有Default走上面这个官方的网站—Next—里头的东西其实和上面一样的再Next—添加Spring Web上面也有Spring的版本。
新建完后里头的包文件上面的很熟悉,上面src,main,java…,test,resources。
来看里头自带的java程序。
1 | package com.wzkang.helloworld; |
首先还是一句话,约定大于配置!
进来看com.wzkang.helloworld这个包里头的东西。
需要创建controllert(业务层,接收前端传来的参数进行业务操作)、dao(和mybatis里的mapper差不多,对数据库进行持久化操作)、pojo(存放实体类的层)、service(服务层,对dao进行再次的封装,封装成服务,管理具体的功能)这些package,不要在其他地方写,它只会在这个包里扫描名字。
先来个简单的玩意儿,改启动的时候spring那个颜文字,只需要在resources目录下新建个banner.txt文件,并在里面写图标就行。注意:这文件的右下角一定要看到灰色的托管图标!!
1.0.1-原理初探
pom.xml
spring-boot-dependencies:核心依赖在父工程中!
我们在写或者引入一些SpringBoot依赖的时候,不需要指定版本,就因为有这些版本仓库
启动器
1 | <dependency> |
启动器:说白了就是SpringBoot的启动场景;
比如spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖!
springboot会将所有的功能场景,都变成一个个的启动器
我们要使用什么功能,就只需要找到对应的启动器就可以了starter
主程序
….无语源码。
2022/03/03—springboot继续学习
1.Springboot项目构建完成后,需要注意一下application.properties文件,这里推荐改成.yml文件,别问,问就是高级n+1倍。
2.导入配置文件处理器
1 | <dependency> |
然后编写yml文件:
1 | # 使用yml可以给实体类赋值,就像key value那样,不用new也不用@Value赋值了 |
光上面这个编写完还不行,还需要绑定扫描使用呢
1 | package com.wzkang.springboot02config.pojo; |
Dog:
1 | package com.wzkang.springboot02config.pojo; |
弄完这些后直接在springboot自带的text测试类里测试下
1 | package com.wzkang.springboot02config; |
运行结果:
Person(name=王八, age=2000, happy=true, birth=Thu Mar 03 00:00:00 CST 2022,
maps={k1=v1, k2=v2}, lists=[code, music, girl],
dog=Dog(name=王八狗, age=5))
2022/03/05—springboot继续学习
yml的好处:
可以松散绑定,啥意思,yml里写last-name和代码里的lastName是一样的,后面跟着的字母默认是大写的,这就是松散绑定。
1 |
|
1 | person: |
当然也可以这样玩
1 | @ConfigurationProperties(prefix = "a.b") |
这个松散绑定,**@Value**可做不到。
JSR303校验
现在需要导入依赖了
1 | <dependency> |
导入完之后就可以用**javax.validation.constraints.***里的注解了
前提是一件在class类上打了**@Validated**开启数据校验,否则没用。
1 |
|
application配置文件可以放在哪里?
按照运行优先度:
1.springboot-03-config/config/application.yml
2.springboot-03-config//application.yml
3.springboot-03-config/src/main/resources/config/aplication.yml
4.springboot-03-config/src/main/resources/aplication.yml(默认放在这)
有多套application配置文件要怎么替换使用?
比如有3个配置文件
application.properties 默认环境
application-dev.properties 开发环境
application-test.properties 测试环境
假设有3种环境要配套用,如果要替换,只能在application.properties使用下面的代码。
spring.profiles.active=dev
这样就会切换到别的配置文件了
但是这很麻烦,还是看看yml吧
1 | spring: |
但是好像过时了,其次感觉不方便管理啊。
2022/03/09—springboot继续学习
那些源码先放着,先学开发吧,看了半天只有一点点头绪。
这次先解决静态资源导入的问题。
这里扯到一个WebMvcAutoConfiguration自动配置类
里头有这个
1 | public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {...} |
其头上的注解还有段这个
1 |
这里头还有个添加静态资源的方法addResourceHandler
他是不是又扯到了这个啊
1 | public String getStaticPathPattern() { |
往下走
1 | private String staticPathPattern = "/**"; |
头上注解是不是这个啊
1 |
这样是不是可以在yml里这样配置?
1 | spring: |
是不是根据配置文件找的?这可不是凭空突然能记下来的。
回到WebMvcAutoConfiguration
看看这个
1 |
|
百度webjars:https://www.webjars.org/
发现它的官网。
发现能maven导入,试试看。
1 | <!-- |
导入完后确实maven包里多了个ace的包
其结构符合
1 | /META-INF/resources/webjars/ |
之前也说了,他映射到/webjars/**
我试了下http://localhost:8081/webjars/ace/01.08.2014/ChangeLog.txt
确实访问到了这里头的东西
1 | 2013.12.02 Version 1.1.2 |
重新回到WebMvcAutoCOnfigration.java
略微深究下在哪儿能导入静态资源
1 | registration.addResourceLocations(this.resourceProperties.getStaticLocations()); |
可以看到添加资源位置在resourceProperties身上,点进去
1 | private final Resources resourceProperties; |
发现有这个类
1 | private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { |
回头看能看到我们项目自带的resources项目包自带的有一个static
源码显示还能放一个public和resource包,两者都可以
但是有优先度问题
resources > static(默认) > public
总结:在Springboot中导入静态资源有以下方式
webjars | localhost:8080/webjars/
public static 等/** resources localhost:8080
网页图标设置,现在只需要在static包 下面放.ioc好像就能直接识别。
不过好像需要在yml里设置,没测试过,要试自己试。
1 | spring: |
thymeleaf
先导入依赖
1 | <dependency> |
要点进
1 | <groupId>org.springframework.boot</groupId> |
点一次
1 | <groupId>org.springframework.boot</groupId> |
再点一次
1 | <thymeleaf.version>3.0.15.RELEASE</thymeleaf.version> |
这玩意儿好像要基于3.几才行好像。
本来是2.几的,把上面那个parent
1 | <parent> |
这个版本来回跳再跳回来
会发现他把版本改成3.几的了。
现在版本更新快了,好像在pom用
1 | <artifactId>spring-boot-starter-thymelef</artifactId> |
就可以解决问题。
来看实例项目:
1 | package com.example.demo.controller; |
然后是resources/templates/index.html的代码
1 |
|
在没导入thymeleaf模板引擎的情况下肯定会报错的。
但是导入后就不会了。
链接上:http://localhost:8080/index
运行结果:index
原理解析:导入后找ThymeleafProperties
现在导入的组件后面找Properties就是对应的组件配置了。
1 | //进来一看还是很明显的 |
所以说最后controller类里的接口的方法的return值,要和模板类里的页面的名字一样。
结论:
要用thymeleaf导入依赖就能用了,但是如果spring版本是1.x的话,那thymeleaf好像就要2.x,反正就是跳一个版本的意思?