前面说了Spring、SpringBoot、Mybatis这三个框架,而SpringBoot是用来整合各种框架的,简单来说它就是框架的框架。
特点:
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
pom.xml拆解:
要搞清楚SpringBoot运行流程,我们首先就必须要搞清楚的是它的pom.xml文件的构造,下面我们来简单说一下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jt</groupId>
<artifactId>springboot_demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_demo1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<!--跳过测试类打包-->
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
最上面那一段是头信息:标识了命名空间和xml遵循的标签规范和xml书写时需要遵循的语法,创建项目自带,无需改动
<parent>标签时因为当初没有指定统一的jar包的版本号,各导各的,最后整合的时候导致jar包冲突,SpringBoot进行整合指定了统一的版本依赖信息,所以这里导入的时SpringBoot的版本号,它在底层已经指定过了jar包的版本号,所以加入之后只需要导入jar包,而不需要写jar包具体的版本号了
<groupId>及下面的一些项目信息是本项目的坐标以及版本号,可以根据信息在本地仓库中定位该项目,以及本项目可以作为其他项目的依赖包进行导入
<properties>显示依赖的JDK版本号,里面的<skipTests>true</skipTests>语句可以在项目打包时跳过测试类进行打包(运行项目时不需要测试类,而且测试类里出现的一些假报错会导致打包失败)
<dependencies>标签是导入jar包的地方,这里要提到的一个SpringBoot的一个拆箱即用的思想,省略或者避免了写原来需要写的大量的配置文件,而在这里只需要添加一个启动类就可以了,注意按需导入,需要什么包导入什么包
<build>maven的依赖及工具API,在项目打包部署发布时需要,否则会影响项目的发布
启动类注解@SpringBootApplication拆解:
首先上一个结构图助于理解(摘自csdn:闪耀的太阳)

进入@SpringBootApplication可发现有元注解和另外三个注解
元注解:加在注解上的注解
- @Target(ElementType.TYPE) 该注解对类有效
- @Retention(RetentionPolicy.RUNTIME) 该注解在运行期有效
- @Documented 生成源码时 是否动态生成注释文档
- @Inherited 标识注解是否可以被继承
@ComponentScan:当SpringBoot启动时,会实例化很多对象,但是因为SpringBoot兼容了非常多的第三方框架,有个别的框架加入后会影响整个代码的流程,所以用这个直接把对程序有影响的排除在外
@SpringBootConfiguration:进入发现除了元注解外还有一个@Configuration注解,它的作用是配置文件/配置类/整合第三方框架的配置,它修饰了@SpringBootConfiguration,而@SpringBootConfiguration又修饰了主启动类@SpringBootApplication,证明启动类也是一个配置类,它会扫描用户自己的配置类信息,并且实例化对象:@Configuration + @Bean
@EnableAutoConfiguration:进入它发现除了元注解外还有 @AutoConfigurationPackage和@Import注解。还记得我们上次发的项目经过了IOC后在XML里需要配置包扫描吗?在SpringBoot整合后包扫描没有消失,只不过@AutoConfigurationPackage替我们去做了,简化了配置文件的编写,该注解会动态的获取主启动类所在的包及子包路径并开启扫描,所以我们写代码都应该在启动类的同包或者子包中。另一个注解@Import我们回顾xml文件引入jar包后进行少量配置或者可以直接使用,但是它只负责加载而不负责运行,而该注解的作用就是根据依赖信息,根据SpringBoot的内部配置信息依次加载执行,它会依次匹配所有启动类和所写的依赖进行匹配,如果成功会执行jar里的内容,不匹配则跳过继续向下执行,知道SpringBoot程序加载完成!下图理解:

到这里SpringBoot的运行流程就说完了!
SpringBoot的基本用法
为属性动态赋值:在SpringBoot启动时默认加载yml文件,我们可以在yml里配置信息
语法:
- 语法1: 数据结构 key-value结构
- 语法2: 写法 key:(空格)value
- 语法3: yml文件 默认字符集是UTF-8编码 中文不乱码
- 语法4: yml文件 有层级效果 注意缩进
例:
server:
port: 8080
msg:
hello: "老铁666"
在Controller里有一个@RestController注解,意思是将此类交给Spring管理
还有一个注解@Value,获取yml文件里的坐标,以上结合使用可实现动态赋值
规则:
- 当Spring容器启动时,会加载YML配置文件. 会将内部的key-value结构 加载到spring维护的内存空间中
- @Value功能,从spring容器中根据key 动态赋值
- springel表达式 简称:spel
使用示例
@Value("${msg.hello}")
private String msg;
返回msg即可,在项目已经打包完成时也可以通过修改yml文件来修改返回的值,class文件不能修改,把文件改为zip,修改后再改会jar即可。
properties文件
业务有时会需要动态赋值,如果将大量的业务数据写到yml文件中 导致代码混乱.最好的方式应该指定properties文件 为业务赋值.
语法:
#数据结构: key=value
#注意事项: 不要添加""号 本身就是字符串.
#字符集编码: 写法采用utf-8,程序读取时采用ISO-8859-1 pro.msg=配置信息
写法如下:
pro.msg=123
动态赋值:
加入在类上@PropertySource(value="classpath:/msg.properties",encoding = "utf-8")指定文件的目录,注意,这里指的是class目录,所以是根目录,后面因为中文会乱码,所以手动指定编码为u8
@Value("${pro.msg}"
private String promsg;
整合Mybatis配置核心文件:
#端口配置
server:
port: 8080
#配置数据源
spring:
datasource:
#如果使用高版本驱动 则添加cj
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
#Spring整合Mybatis
mybatis:
#定义别名包
type-aliases-package: com.jt.pojo
#导入映射文件
mapper-locations: classpath:/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
测试类:
测试类也需要写在启动类所在的包下
测试类上需要加@SpringBootTest注解:
原理:
- 测试类执行时,会根据SpringBoot配置动态启动Spring容器
- Spring容器启动时,会加载所有的注解和配置类,所有的对象都会加载到Map集合中 通过@SpringBootTest这个注解可以动态获取里面的对象
到这里就结束了,很困!!
满怀希望就会所向披靡0_0
2万+



被折叠的 条评论
为什么被折叠?



