码云私人令牌70e0a7b76ff3e5f2d8871729ac48ee28
a.该阶段如何学习
b.SpringBoot
核心思想:约定大于配置
基于Spring,默认配置了许多框架的使用,用于敏捷,迅速开发基于Spring框架的应用程序
SpringBoot的优点:
- 为所有的Spring开发者更快的入门
- 开箱即用,提供各种默认配置,简化项目配置
- 内嵌式简化web项目
- 没有多余代码,和xml配置
c.微服务框架
将service变成小模块
一种架构风格,建成一系类小服务组合,可以通过http进行互通
缺点:给部署和运维带来难度
单体应用架构:易于开发和测试,修改维护困难
微服务架构:将独立的元素动态组合,节省资源,每个功能元素的服务都可以替换,升级
d.第一个SpringBoot程序
1.创建项目
原理:官方集成了****https://start.spring.io/这个spring的官网
使用idea创建,选择spring initalizr,依赖用spring web,Java8使用
2.创建包
需要Apllication的同级目录下
细节:
- web层简化到只要写一个接口
- 打包形成的jar包就是一个个服务,前后端分离,数据由后端写的 服务jar包接口提供,不需要依赖idea,本身就是一个可以执行的程序
- 创建时包名可以只要前面部分
controller
@Controller
@RequestMapping("/hello")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello(){
return "hello";
}
}
application.properties
\#更改项目的端口号
server.port=8081
e.自动配置原理
pom.xml
- spring-boot-dependencies : 核心依赖在在父工程中
- 引入依赖时,不需要指定版本号,因为有这些版本仓库
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
springboot的启动场景
比如spring-boot-starter-web,会自动导入web的所有依赖
SpringBoot会将所有功能场景,变成一个个启动器,使用功能时,只要找到对应的启动器
主程序
//@SpringBootApplication标注这是一个SpringBoot项目
@SpringBootApplication
public class HellowWordApplication {
//将springboot启动
public static void main(String[] args) {
SpringApplication.run(HellowWordApplication.class, args);
}
}
注解 ctrl+左键 进入注解
SpringBootConfiguration :springboot配置
Configuration spring配置
Component spring的一个组件
结论:SpringBoot的所有自动配置都是在启动时扫描并加载:spring.factories所有的自动配置类都在这里面,会以类名的方式将需要的组件添加到容器中,但是不一定会生效,要判断条件是否成立,只有导入了对应的starter ,有了对应的启动器,自动装配才会生效,才会配置成功,这样以前需要手动配置的东西,就自动配置好了;
f.主启动run方法
不只是运行了一个run方法,开启了一个服务
1.首先判断是一个普通项目还是web项目
2.推断并设置main方法的定义类,找到运行的主类
3.存在监听器,获取上下文,处理bean
g.yaml语法讲解
原理:自定义才能解决更多的功能,自动配置只能写个helloword
springboot使用全局的配置文件,配置文件是固定的
application.properties
语法:key=value
server.port=8081
applicaion.yaml
key:空格value
server
poet: 8081
语法结构
#普通的key=value
name: qingjiang
#对象
student:
name: qingian
age: 3
#行内写法
student1: {name: qinjiang,age: 15}
#数组
pets:
-cat
-dog
-pig
pets1: [cat,dog,pig]
#可以注入到配置类中,值可以写到yaml中,Java类中可以为空
细节:
对空格的要求很高,空格表示层级关系
student:
name:
age:表示student和name两个类,age.name age下的属性
h.给属性赋值的几种方式
原理:
1.new
2.Spring方式@Value
类
@Component
public class Dog {
@Value("旺财")
private String name;
@Value("3")
private Integer age;
测试
class SpringBoot02ConfigApplicationTests {
@Autowired
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog );
}
}
3.yaml直接注入
类注入,只要在spring中就能自动注入
为了确保能够扫描到类,需要加入@Component
person类
/**
将配置文件中的配置的每一个属性的值,一一映射到本类中,进行绑定。
只要SpringBoot容器中的组件才能使用@configurationProperties(prefix = "person")
不只是实体类中能使用,配置类config也可以
*/
@ConfigurationProperties(prefix = "person")
application.yaml
person:
name: qiang
age: 20
happy: true
birth: 2001/9/06
maps: {k1: v1,k2: v2}
lists:
-code
-music
-boy
dog:
name: 旺财
age: 3
扩展:
yaml中可以使用EI表达式
name: ${person.hello:hello}_旺财
i.JSR303验证
@Validated //数据校验
public class Person {
@Email()
松散绑定
yaml中可以用first-name,可以与类中firstName对应,因为-后面是默认大写的
j.多环境配置及配置文件位置
优先级1234,默认的是优先级最低的
多环境切换
同一个项目中有不同的环境
application.yml
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: test
k.自动配置原理再理解
SpringBoot程序中,在spring.factories有大量的自动配置类xxxconfiguration,当我们要写某个功能时,先判断功能有没有在自动配置类中,有的话然后看所需要的组件有没有在自动配置类,存在组件的话就不用手动配置,不存在需要手动添加组件,需要从properties自动配置类中获取某些属性,然后在yml配置文件中给属性赋值就行了
l.web开发探究
m.静态资源导入探究
创建应用前先写一个 controller,确保tomcat等一些配置能用
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello,world";
}
}
看源码,需要下载
找类,双击shirt
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
registration.addResourceLocations(resource);
}
});
}
静态资源可以放在
- resources目录下的public static(默认)resources和根目录/* 访问地址 localhost:8080/hello.js*
- webjars 访问地址localhost:8080/webjars/
- 优先级 resources>static>public
n.首页和图标定制
首页放在static resouces public都可
图标定制 版本更新,源码也会改变
o.thymeleaf模板引擎
模板引擎thymeleaf:其实jsp(后台查询数据发给jsp,jsp可以实现数据的显示,和交互)也是一个模板引擎,由于springboot使用war包和内嵌tomcat,不支持jsp,只能用纯静态页面,所以SpringBoot用thymeleaf代替jsp
thymeleaf官网:Thymeleaf 教程 - Thymeleaf | Docs4dev
模板引擎工作原理:按照data中的数据把hello${user}表达式解析,把数据填充到指定位置,然后把内容写出去
原理:首先需要模板引擎thymeleaf支持数据显示,并且在templates中的所有页面都只能通过Controller跳转,不能通过RestController
1.maven导入thymeleaf依赖
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.templates中写html页面
test.html
<!DOCTYPE html>
<html lang="en" xmlns:th