写在开头:
程序 = 数据结构 + 算法 = 程序员
集合框架就是基础阶段典型的数据结构+算法
程序 = 面向对象 + 框架 = 码农
一.是什么
1.spring框架:
<1>是什么
spring是开源的,轻量级的java开发框架
<2>为什么用
解决企业级应用开发的复杂性,简化开发
<3>怎么用
通过ioc,DI实现松耦合;通过aop声明式编程
2.springboot框架
springboot是javaweb的开发框架,和springmvc类似,简化开发,约定大于配置;
迅速开发web应用,几行代码开发一个http接口;
就像maven整合了所有jar包,springboot整合了所有框架
3.微服务
<1>是什么
I.微服务介绍
i.微服务是一种架构风格
Restful是接口风格;
MVC是三层架构;
MVVM是前端架构;
微服务把服务继续拆分成微服务
把原来的service业务层拆分成模块
ii.模块之间的通信方式:
http
rpc
II.架构演变
i.单体应用架构
把一个应用中的所有应用服务都封装在一个应用中;
无论是ERP,CRM或者其他系统,把数据库访问,web访问等都放到一个war包内;
易于开发和测试,想要做扩展只能通过负载均衡实现
ii.微服务架构
打破单体应用架构,把每个功能独立出来
<2>为什么用
单体架构不好用
<3>怎么用
举例:电商系统
查缓存,连数据库,浏览页面,结账,支付等服务都是单独的的功能服务,共同构建成了一个系统,如果修改其中一个功能,只需要更新其中一个功能服务单元就可以
二.怎么用
1.第一个springboot程序
<1>环境
jdk 1.8
maven 3.6.1
springboot:最新版
IDEA
<2>快速生成springboot程序
I.官方提供了快速生成的网站
i.IDEA中导入官网上下载好的springboot项目(开发基本不用这种方式)
ii.IDEA中集成了这个网站直接创建springboot项目
iii.看依赖
可以发现刚创建的新项目就已经导入了很多依赖,所以spring帮我们做了很多配置
iv.看目录
<3>简单分析几个默认的配置类
I.程序的主入口类
这个类本身就是spring的一个组件
II.pom文件分析
spring-boot-starter-parent
是父类
spring-boot-starter-web
实现http接口(该依赖包含了springmvc,默认tomcat作为嵌入式容器)
spring-boot-starter-test
用于编写单元测试的依赖包
spring-boot-maven-plugin
用于打jar包
2.IDEA快速创建springboot项目
<1>目录
<2>pom.xml
<3>controller层
<4>核心配置文件修改项目端口号
<5>扩展——自定义修改springbboot的banner
bootschool在国内比较快
3.springboot自动装配原理
<1>pom.xml
I.父工程
spring-boot-dependencies
观察源码发现,我们导入springboot依赖的时候,不需要指定版本,因为父工程有这些版本仓库
<2>启动器
I.有了启动器,需要web就引入spring-boot-starter-web,他就会导入web环境需要的所有依赖;需要别的就引入别的依赖;
II.springboot会把所有应用场景变成一个个的启动器;
因此我们需要用什么功能,只需要找到对应的启动器starter就可以
III.官网可以看starter启动器
https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/html/using-spring-boot.html#using-boot-starter
<3>.主程序
I.主程序类的简单分析
II.深入分析注解,理解为什么主启动类能够启动起来
<4>yml配置文件
springboot的yml配置文件的作用就是修改自动配置的默认值
I.官方文档
https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#boot-features-external-config
II.了解原理
i.配置文件命名
通过分析依赖的传递,可以知道,springboot过滤了yml、yaml、properties为后缀的配置文件
ii.yaml
yaml不是标记语言,是一种格式,可以理解为json,并且可以读取配置
III.yaml语法
yml与properties配置文件存的数据的对比
VI.yml真正的作用以及和properties的简单对比
i.可以给实体类属性赋值
①.目录结构
②.编写Dog实体类以及Person实体类作为添加组件的注解
③.给组件中的属性赋值并测试
1).spring中给组件中属性赋值通过@value
给Dog赋值
2).通过yml给Javabean赋值
给Person赋值
④.@ConfigurationProperties作用
把配置文件中配置的每一个属性的值,映射到组件中;
告诉springboot,本类中的所有属性和配置文件中的配置进行绑定;
注意:只有这个组件是容器中的组件,才能使用springboot提供的这个注解
⑤.扩展
上面例子是把实体类和yml配置文件绑定;
因为现在更强调javaconfig,所以可以把之前的mybatis的xml配置文件写成欧通java类,然后与yml绑定
⑥.yml与properties对比
1).需要在idea把编码改为utf-8
2).给Person的name属性赋值
⑦.yml的随机占位符
ii.松散绑定
iii.JSR303数据校验
①源码放置的位置
②用法大全
③用法举例
V.配置文件位置以及多环境配置
i.配置文件(yaml,yml,properties)放置的位置
ii.多环境切换
用于生产环境,测试环境的切换
①.properties
1)目录
2)配置多环境
②.yml/yaml
VI.yaml中可以配置什么
配置文件中可以写的东西和spring.factories之间有很强的联系:
可以在配置文件中配置的东西,一定存在xxxProperties这样的文件,这样的文件会被xxxAutoConfigration装配
<5>自动装配总结
springboot的所有自动配置都是在启动的时候扫描并加载:spring.factories,所有的自动配置类都在这里,但是不一定生效,要判断条件是否成立,需要导入对应的start,也就是对应的启动器,有了启动器,自动装配才会生效,配置就完成了。
4.JSR303数据校验
5.springboot整合web项目
前面了解springboot帮我们配置了什么,能不能修改,怎么修改,修改哪些东西,能不能扩展
xxxxxxAutoConfigration:向容器中自动配置组件
xxxProperties:自动配置类,装配配置文件中自定义的一些内容
要解决的问题:
导入静态资源
首页面
jsp,模板引擎Thymleaf模板
装配扩展springmvc
增删改查
拦截器
国际化解决中英文
<1>新建一个springboot项目并测试
<2>整合静态资源
I.找到webmvc的自动装配类
II.分析放置静态资源路径的三种方式
i.方式一
通过自定义的方式,这么做下面的方式就会失效,基本不用
ii.方式二
springboot可以使用webjars这样引入maven坐标的方式管理(基本不用)
①官网找webjars的maven坐标
https://www.webjars.org/
②项目中导入依赖,查看映射的路径
放在/webjars/**下的静态资源,都映射在/METE-INF/rescoures/webjars/文件下
③访问资源
iii.方式三(常规用法)
通过获取静态资源的路径
查看源码发现,放在/**下的静态资源,都映射在以下几种路径中
/META-INF/rescoures/
/rescoures/
/static/
/public/
优先级是:rescoures>static(默认)>public
<3>首页和图标定制
①通过查看源码得知,放置在静态资源路径下的index.html可以作为首页面
②通过controller跳转到首页
上面的做法是为了看源码理解首页面的放置路径,这个方法才是常规用法(一般放在templates目录下,可以在创建项目时添加模板引擎,也可以添加依赖)
<4>thymeleaf模板引擎
之前用的模板引擎是jsp,而springboot不推荐用jsp,推荐使用thymeleaf模板引擎
模板引擎的作用:写一个页面模板,比如页面的数据有一些值是动态的,我们用一些表达式把值取出来,后台使用model传回去,原来是用jsp,现在用thymeleaf
I.依赖引入
II.分析thymeleaf源码
查看thymeleaf的自动配置类,可以看到前后缀,映射路径等
III.thymeleaf简单使用——controller存值,thymeleaf取值
IV.thymeleaf语法
最常用的——遍历取数据
<5>装配扩展springmvc
I.编写配置类扩展springmvc
II.配置一个自己的视图解析器并注册到bean
实现springboot自动装配springmvc扩展
III.扩展格式化转换器——消息格式化
IV.扩展视图跳转