P1 :springboot

125 阅读7分钟

写在开头:

程序 = 数据结构 + 算法 = 程序员
    集合框架就是基础阶段典型的数据结构+算法
程序 = 面向对象 + 框架 = 码农

一.是什么

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.官方提供了快速生成的网站

image.png

i.IDEA中导入官网上下载好的springboot项目(开发基本不用这种方式)

image.png

ii.IDEA中集成了这个网站直接创建springboot项目    

image.png

iii.看依赖    
可以发现刚创建的新项目就已经导入了很多依赖,所以spring帮我们做了很多配置

image.png

iv.看目录    

image.png

<3>简单分析几个默认的配置类
I.程序的主入口类
这个类本身就是spring的一个组件

image.png

II.pom文件分析
spring-boot-starter-parent
    是父类
spring-boot-starter-web
    实现http接口(该依赖包含了springmvc,默认tomcat作为嵌入式容器)
spring-boot-starter-test
    用于编写单元测试的依赖包
spring-boot-maven-plugin
    用于打jar包
    

image.png

2.IDEA快速创建springboot项目

<1>目录    

image.png

<2>pom.xml    

image.png

<3>controller层

image.png

<4>核心配置文件修改项目端口号    

image.png

<5>扩展——自定义修改springbboot的banner
bootschool在国内比较快     

image.png

3.springboot自动装配原理

<1>pom.xml

I.父工程
spring-boot-dependencies 
    观察源码发现,我们导入springboot依赖的时候,不需要指定版本,因为父工程有这些版本仓库

image.png

<2>启动器

I.有了启动器,需要web就引入spring-boot-starter-web,他就会导入web环境需要的所有依赖;需要别的就引入别的依赖;

image.png

II.springboot会把所有应用场景变成一个个的启动器;
因此我们需要用什么功能,只需要找到对应的启动器starter就可以

image.png

III.官网可以看starter启动器
https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/html/using-spring-boot.html#using-boot-starter

image.png

<3>.主程序

I.主程序类的简单分析    

image.png

II.深入分析注解,理解为什么主启动类能够启动起来    

image.png

<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配置文件存的数据的对比    

image.png

VI.yml真正的作用以及和properties的简单对比

image.png

i.可以给实体类属性赋值
①.目录结构    

image.png

②.编写Dog实体类以及Person实体类作为添加组件的注解

image.png

③.给组件中的属性赋值并测试
1.spring中给组件中属性赋值通过@value    
给Dog赋值

image.png

2).通过yml给Javabean赋值
给Person赋值   

image.png

④.@ConfigurationProperties作用
把配置文件中配置的每一个属性的值,映射到组件中;
告诉springboot,本类中的所有属性和配置文件中的配置进行绑定;
注意:只有这个组件是容器中的组件,才能使用springboot提供的这个注解
⑤.扩展
上面例子是把实体类和yml配置文件绑定;
因为现在更强调javaconfig,所以可以把之前的mybatis的xml配置文件写成欧通java类,然后与yml绑定
⑥.yml与properties对比
1).需要在idea把编码改为utf-8    

image.png

2).给Person的name属性赋值    

image.png

⑦.yml的随机占位符    

image.png

 ii.松散绑定     

image.png

iii.JSR303数据校验
①源码放置的位置    

image.png

②用法大全

image.png

③用法举例    

image.png

V.配置文件位置以及多环境配置

i.配置文件(yaml,yml,properties)放置的位置    

image.png

ii.多环境切换
用于生产环境,测试环境的切换
①.properties
1)目录    

image.png

2)配置多环境    

image.png

②.yml/yaml    

image.png

VI.yaml中可以配置什么

配置文件中可以写的东西和spring.factories之间有很强的联系:
可以在配置文件中配置的东西,一定存在xxxProperties这样的文件,这样的文件会被xxxAutoConfigration装配

<5>自动装配总结

springboot的所有自动配置都是在启动的时候扫描并加载:spring.factories,所有的自动配置类都在这里,但是不一定生效,要判断条件是否成立,需要导入对应的start,也就是对应的启动器,有了启动器,自动装配才会生效,配置就完成了。

4.JSR303数据校验

5.springboot整合web项目

前面了解springboot帮我们配置了什么,能不能修改,怎么修改,修改哪些东西,能不能扩展
xxxxxxAutoConfigration:向容器中自动配置组件
xxxProperties:自动配置类,装配配置文件中自定义的一些内容
要解决的问题:
    导入静态资源
    首页面
    jsp,模板引擎Thymleaf模板
    装配扩展springmvc
    增删改查
    拦截器
    国际化解决中英文

<1>新建一个springboot项目并测试

image.png image.png
image.png

<2>整合静态资源

I.找到webmvc的自动装配类

image.png

II.分析放置静态资源路径的三种方式

i.方式一
通过自定义的方式,这么做下面的方式就会失效,基本不用    

image.png

ii.方式二
springboot可以使用webjars这样引入maven坐标的方式管理(基本不用)
①官网找webjars的maven坐标
https://www.webjars.org/

image.png

②项目中导入依赖,查看映射的路径    
放在/webjars/**下的静态资源,都映射在/METE-INF/rescoures/webjars/文件下

image.png

③访问资源    

image.png image.png

iii.方式三(常规用法)
通过获取静态资源的路径
查看源码发现,放在/**下的静态资源,都映射在以下几种路径中
/META-INF/rescoures/
/rescoures/
/static/
/public/
优先级是:rescoures>static(默认)>public

image.png image.png

<3>首页和图标定制

①通过查看源码得知,放置在静态资源路径下的index.html可以作为首页面

image.png

image.png

image.png

②通过controller跳转到首页
上面的做法是为了看源码理解首页面的放置路径,这个方法才是常规用法(一般放在templates目录下,可以在创建项目时添加模板引擎,也可以添加依赖)    

image.png

<4>thymeleaf模板引擎

之前用的模板引擎是jsp,而springboot不推荐用jsp,推荐使用thymeleaf模板引擎
模板引擎的作用:写一个页面模板,比如页面的数据有一些值是动态的,我们用一些表达式把值取出来,后台使用model传回去,原来是用jsp,现在用thymeleaf 

image.png

I.依赖引入    

image.png

II.分析thymeleaf源码
查看thymeleaf的自动配置类,可以看到前后缀,映射路径等 

image.png

III.thymeleaf简单使用——controller存值,thymeleaf取值    

image.png

IV.thymeleaf语法
最常用的——遍历取数据    

image.png

<5>装配扩展springmvc

I.编写配置类扩展springmvc     

image.png

II.配置一个自己的视图解析器并注册到bean
实现springboot自动装配springmvc扩展    

image.png

III.扩展格式化转换器——消息格式化
IV.扩展视图跳转

image.png