(建议配合哔哩哔哩狂神说springboot食用,有问题一起来交流吧🐧:504863638)
javase:OOP
mysql:持久化
html+css+js+jquery+框架:视图
javaweb:独立开发MVC三层架构的网站:原始
ssm:框架:简化了开发流程,配置也开始较为复杂
war包:tomcat运行
spring再简化:springboot-jar:内嵌tomcat;微服务架构
服务越来越多:springcould
新服务架构:服务网格!
约定大于配置
- 开箱即用
- 内嵌式容器简化web项目
- 没有冗余代码生成和XML配置的要求
微服务是一种架构风格
高内聚低耦合
环境:
- jdk1.8
- maven 3.6.1
- springboot:最新版
- IDEA
配置springboot 启动彩蛋
springboot banner网站:https://www.bootschool.net/ascii
在resource中新建文件banner.txt 给文件的内容则为启动彩蛋
修改端口号
在resource文件夹中的application.properties文件中添加:
自动装配:
pom.xml
-
spring-boot-dependencies:核心依赖在父工程中
-
启动器:SpringBoot的启动场景
-
如spring-boot-starter-web,会自动导入web环境所有的依赖
-
springboot会将所有的功能场景,都变成一个个启动器
-
想要使用什么功能,就只需要找到对应的启动器 starter
主程序
-
注解
-
补:注解和反射
-
-
获取候选的配置
-
META-INF/spring.factories:自动配置的核心文件[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cE6IQv8y-1617241215055)(C:UsersadvancerAppDataRoamingTypora ypora-user-imagesimage-20210225232052715.png)]
-
-
结论:springboot所有自动装配都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,自动装配就会生效,然后配置成功。
- springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值;
- 将这些自动配置的类导入容器,自动配置就会生效,进行自动配置!
- 以前我们需要自动配置的东西,springboot帮我们做了
- 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
- 他会把所有需要导入的组件,一类名的方式返回,这些组件就会被添加到容器
- 容器中也会存在非常多的xxxAutoCofiguration的文件(@Bean),就是这些类给容器中导入了这个场景所需要的所有组件,并自动配置。@Configuration,JavaConfig
- 有了自动配置类,免去了我们手动编写配置文件的工作
-
-
run
- JavaConfig @Configuration(配置) @Bean(组件)
Docker:进程
关于springboot的理解:
- 自动装配
- run();(重构才会用到)
springCloud 全面接管springMVC的配置
使用yaml文件
yaml可以给实体类赋值
application.yaml
其中还可以使用SPEL表达式获取值
不局限于pojo类 例如mysql的配置就可以使用
使用properties文件
javaConfig可以采用以上两种方式,绑定配置文件的值
**配置文件读取顺序:yml -> yaml -> properties,所以,如果都配置了同名的配置,以properties为准,因为后读取的会覆盖前面的。优先级:properties>yaml >yml **
对比
小结
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
结论:
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
JSR303
- 常见参数
多环境配置以及文件位置
多环境
开发环境dev 测试环境test 生产环境pro
properties配置文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml , 用来指定多个环境版本;
例如:
application-test.properties 代表测试环境配置
application-dev.properties 代表开发环境配置
但是Springboot并不会直接启动这些配置文件,它默认使用application.properties主配置文件;
我们需要通过一个配置来选择需要激活的环境:
yaml的多文档块
和properties配置文件中一样,但是使用yml去实现不需要创建多个配置文件,更加方便了 !
注意:如果yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的!
文件位置
配置文件可以放到以下四个位置 并且有优先级区分
优先级:file:https://blog.csdn.net/qq_46658171/article/details/config > file: https://blog.csdn.net/qq_46658171/article/details/ > classpathhttps://blog.csdn.net/qq_46658171/article/details/config > classpathhttps://blog.csdn.net/qq_46658171/article/details/
自动配置原理
xxxAutoConfiguration中的注解
定义bean
下面是@Configuration里的一个例子
这个配置就等同于之前在xml里的配置
根据当前不同的条件判断,决定这个配置类是否生效!
- 一但这个配置类生效;这个配置类就会给容器中添加各种组件;
- 这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
- 所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;
- 配置文件能配置什么就可以参照某个功能对应的这个属性类
总结
1、SpringBoot启动会加载大量的自动配置类
2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
**xxxxAutoConfigurartion:自动配置类;**给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
了解:@Conditional
了解完自动装配的原理后,我们来关注一个细节问题,自动配置类必须在一定的条件下才能生效;
@Conditional派生注解(Spring注解版原生的@Conditional作用)
作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效;
那么多的自动配置类,必须在一定的条件下才能生效;也就是说,我们加载了这么多的配置类,但不是所有的都生效了。
我们怎么知道哪些自动配置类生效?
我们可以通过启用 debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效;
Positive matches:(自动配置类启用的:正匹配)
Negative matches:(没有启动,没有匹配成功的自动配置类:负匹配)
Unconditional classes: (没有条件的类)
如果没有生效就需要导入所需要类的启动器
前端:
模板:
别人写好的,我们拿来改成自己需要的
框架:
组件:自己动手组装拼接! bootstrap,Layui,semantic-ui
- 栅格系统
- 导航栏
- 侧边栏
- 表单
写一个网页大体步骤
- 前端:页面长什么样子:数据
- 设计数据库(数据库设计,难点!)
- 前端独立运行,独立化工程
- 数据决口如何对接:json,对象 all in one!
- 前后端联调测试!
1、开发一套自己的后台模板:工作必要!
2、前端界面:至少能够通过前端框架,组合出来一个网站页面
- index
- about
- blog
- post
- user
3、让这个网站能够独立运行
导入静态资源
存放文件夹
在文件夹resources下可以再建resouces static public三种文件夹来存放静态文件
访问优先级
- 首先访问public文件夹下的,其次访问static下的,最后访问resources下的
- 所以优先级顺序为resouces>static>public
小结:
- 在springboot下可以使用以下方式处理静态资源
- webjars(不常用) localhost:8080/webjars/
- public, static, /**, resource localhost:8080/
- 优先级:
- resouces>static(默认)>public
首页
在静态资源文件夹中添加index.html就可以自动进行访问
jsp, 使用模板引擎Thymeleaf
jsp成为过去流行技术,不利于前后端分离
使用模板引擎可以将静态页面进行动态结合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClN0s1os-1617241215059)(C:UsersadvancerAppDataRoamingTypora ypora-user-imagesimage-20210305130448942.png)]
添加thymeleaf启动器
需要注意版本是否出错
标准表达式
简单表达
变量表达式: ${…}
选择变量表达式: *{…}
消息表达式: #{…}
链接网址表达式: @{…}
片段表达式: ~{…}
字面
文本文字:‘one text’,‘Another one!’,…
号码文字:0,34,3.0,12.3,…
布尔文字:true,false
空字面: null
文字标记:one,sometext,main,…
文字操作:
字符串连接: +
文字替换: |The name is ${name}|
算术运算
二元运算符:+,-,*,/,%
减号(一元运算符): -
布尔运算
二元运算符:and,or
布尔否定(一元运算符): !,not
比较和平等
比较:>,<,>=,<=(gt,lt,ge,le)
等值运算符:==,!=(eq,ne)
条件运算符
if-then: (if) ? (then)
if-then-else: (if) ? (then) : (else)
default: (value) ?: (defaultvalue)
特殊特征符
无操作: _
所有这些功能都可以组合和嵌套,例:
'User is of type ’ + (user.isAdmin()?′Administrator′:(user.isAdmin()?′Administrator′😦{user.type} ?: ‘Unknown’))
例子
小结
只需要使用thymeleaf,只需要导入依赖即可。我们将html放入templates目录下即可!
装配扩展SpringMVC
修改springboot的默认设置
方式一:
通过webmvc的自动配置原理分析,通过源码探究,得出结论。springboot在自动配置很多组件的时候,先看容器中有没有自己配置的(如果用户自己配置@Bean),如果有就用用户配置的,如果没有就用自动配置的;如果有些组件可以存在多个,比如视图解析器,就将用户配置和自己默认的组合起来。
拓展springmvc dispatchservlet如果想自定义一些定制化功能,只要写这个组件,然后将他交给springboot,springboot会帮我们自动装配
方式二:
编写一个@Configuration注解类,并且类型要为WebMvcConfigurer(接口),而且不能标注@EnableWebMvc注解
如果我们要扩展springmvc,官方建议我们这样做
如果标注了@EnableWebMvc注解,其中WebMvcAutoConfiguration.java中的@ConditionalOnMissingBean注解将会导致该类失效。
小结:
在springboot中,有非常多的xxxConfiguration帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了!
拦截器
实现HandlerInterceptor接口
重写preHandle方法
在MyConfig中配置
是否从/static开始,是否静态资源自动被放过
国际化
创建配置文件
-
创建国际化文件夹:i18n
-
新建配置文件:xxx.properties, xxx_en_US.properties, xxx_zh_CN.properties
-
创建第二个文件时自动合并为Resource Bundle ‘xxx’
-
两种方式设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WwSd5Igm-1617241215061)(C:Users advancerAppDataRoamingTypora ypora-user-imagesimage-20210311210424741.png)]
html文件设置
-
使用thymeleaf获取配置文件中的国际化配置
在html文件中添加中英文切换按钮
创建类实现LocaleResolver接口
默认AcceptHeaderLocaleResolver实现了LocaleResolve接口,可以根据这个类中重写的resolveLocale()方法中找到一定的逻辑。
重写接口中的方法resolveLocale(HttpServletRequest request)
在配置类中将这个类放入bean中
增删改查
查
提取公共页面
- 提取
- th:fragment=“sidebar”
- 使用
- th:replace="~{commons/common::sidebar} 替换元素
- th:insert="~{commons/common::sidebar(active=‘main’)} 在元素中插入
- 如果要传参数,可以直接使用()传参,接受判断即可
列表循环展示
- th:each=“emp:${allEmps}” 循环取值
- 取属性
增
- 可以使用GetMapping进入到曾加页面
- 再通过PostMapping处理从前端获取到的信息
404界面
- 再templates下创建一个新文件夹error
- 将404页面、500页面放入该文件夹中,springboot会自动配置进去
JDBC
项目导入了如下的启动器:
编写yaml配置文件连接数据库
直接使用
输出当前datasource类:HikariDataSource
HikariDataSource 号称 Java WEB 当前速度最快的数据源,相比于传统的 C3P0 、DBCP、Tomcat jdbc 等连接池更加优秀;
Druid(重点)
在配置好jdbc的基础上
导入依赖
配置yml配置
现在这些配置还不能生效
配置DruidConfig.java
配置这些之后可以使yml文件的上述配置生效
可以登录http://localhost:8080/druid/login.html来进行后台管理
Mybatis(重点)
导入相关依赖
在有实体类pojo的前提下
映射接口与映射文件
创建接口
在com.ljq.mapper中创建BookMapper.java
创建映射配置文件
在resource文件夹下BookMapper.xml
整合mybatis
在配置文件application.yml中添加语句
调用dao层
BookController.java