IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Boot进阶(二)SpringBoot源码剖析 -> 正文阅读

[Java知识库]Spring Boot进阶(二)SpringBoot源码剖析

一. SpringBoot源码环境构建

(一)下载源码

1. 官网下载

spring-boot-2.2.9.RELEASE

2. 百度网盘下载

链接: https://pan.baidu.com/s/1mhJJlP4ZezggIL_Z2bvizQ
提取码:8888

(二)环境准备

1 JDK1.8以上
2 Maven3.5以上

(三)编译源码

进? spring-boot 源码根?录
执? mvn 命令 : mvn clean install -DskipTests -Pfast // 跳过测试?例,会下载?量 jar 包(时
间会长一些)

(四)导入IDEA

将编译后的项目导入IDEA

?打开pom.xml关闭maven代码检查

二. SpringBoot依赖管理源码剖析

(一)spring-boot-starter-parent 依赖源码剖析

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
上述代码中,将 spring-boot-starter-parent 依赖作为 Spring Boot 项目的统一父项目依赖管理,并
将项目版本号统一为 2.2.9.RELEASE ,该版本号根据实际开发需求是可以修改的。
使用 “Ctrl+ 鼠标左键 进入并查看 spring-boot-starter-parent 底层源文件,先看 spring-boot
starter-parent 做了哪些事。
首先看 spring - boot - starter - parent properties 节点:
<properties>
		<main.basedir>${basedir}/../../..</main.basedir>
		<java.version>1.8</java.version>
		<resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<maven.compiler.source>${java.version}</maven.compiler.source>
		<maven.compiler.target>${java.version}</maven.compiler.target>
	</properties>
在这里 spring - boot - starter - parent 定义了:
1. 工程的 Java 版本为 1.8
2. 工程代码的编译源文件编码格式为 UTF - 8
3. 工程编译后的文件编码格式为 UTF - 8
4. Maven 打包编译的版本
再来看 spring - boot - starter - parent 的「 build 」节点
接下来看 POM build 节点,分别定义了 resources 资源和 pluginManagement
<resources>
			<resource>
				<directory>${basedir}/src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>**/application*.yml</include>
					<include>**/application*.yaml</include>
					<include>**/application*.properties</include>
				</includes>
			</resource>
			<resource>
				<directory>${basedir}/src/main/resources</directory>
				<excludes>
					<exclude>**/application*.yml</exclude>
					<exclude>**/application*.yaml</exclude>
					<exclude>**/application*.properties</exclude>
				</excludes>
			</resource>
		</resources>
我们详细看一下 resources 节点,里面定义了资源过滤,针对 application yml properties
式进行了过滤,可以支持支持不同环境的配置,比如 application - dev.yml application -
test.yml application - dev.properties application - dev.properties 等等。
pluginManagement 则是引入了相应的插件和对应的版本依赖
最后来看 spring-boot-starter-parent 的父依赖 spring - boot - dependencies
spring-boot-dependencies properties 节点
我们看定义 POM ,这个才是 SpringBoot 项目的真正管理依赖的项目,里面定义了 SpringBoot 相关的版本
<properties>
		<main.basedir>${basedir}/../..</main.basedir>
		<!-- Dependency versions -->
		<activemq.version>5.15.13</activemq.version>
		<antlr2.version>2.7.7</antlr2.version>
		<appengine-sdk.version>1.9.81</appengine-sdk.version>
		<artemis.version>2.10.1</artemis.version>
		<aspectj.version>1.9.6</aspectj.version>
		<assertj.version>3.13.2</assertj.version>
		<atomikos.version>4.0.6</atomikos.version>
		<awaitility.version>4.0.3</awaitility.version>
		<bitronix.version>2.1.4</bitronix.version>
		<byte-buddy.version>1.10.13</byte-buddy.version>
		<caffeine.version>2.8.5</caffeine.version>
		<cassandra-driver.version>3.7.2</cassandra-driver.version>
		<classmate.version>1.5.1</classmate.version>
		<commons-codec.version>1.13</commons-codec.version>
		<commons-dbcp2.version>2.7.0</commons-dbcp2.version>
		<commons-lang3.version>3.9</commons-lang3.version>
		<commons-pool.version>1.6</commons-pool.version>
		<commons-pool2.version>2.7.0</commons-pool2.version>
		<couchbase-client.version>2.7.16</couchbase-client.version>
		<couchbase-cache-client.version>2.1.0</couchbase-cache-client.version>
		<dependency-management-plugin.version>1.0.9.RELEASE</dependency-management-plugin.version>
		<db2-jdbc.version>11.5.4.0</db2-jdbc.version>
......
</properties>
spring-boot-dependencies dependencyManagement 节点
在这里, dependencies 定义了 SpringBoot 版本的依赖的组件以及相应版本。
<dependencyManagement>
		<dependencies>
			<!-- Spring Boot -->
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot</artifactId>
				<version>${revision}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-test</artifactId>
				<version>${revision}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-test-autoconfigure</artifactId>
				<version>${revision}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-actuator</artifactId>
				<version>${revision}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-actuator-autoconfigure</artifactId>
				<version>${revision}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-autoconfigure</artifactId>
				<version>${revision}</version>
			</dependency>
</dependencyManagement>
spring - boot - starter - parent 通过继承 spring - boot - dependencies 从而实现了 SpringBoot 的版本依
赖管理 , 所以我们的 SpringBoot 工程继承 spring-boot-starter-parent 后已经具备版本锁定等配置了 , 这也就是在 Spring Boot 项目中 部分依赖 不需要写版本号的原因

(二)spring-boot-starter-web 依赖源码剖析

查看spring-boot-starter-web依赖文件源码,核心代码具体如下

<?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-starters</artifactId>
		<version>${revision}</version>
	</parent>
	<artifactId>spring-boot-starter-web</artifactId>
	<name>Spring Boot Web Starter</name>
	<description>Starter for building web, including RESTful, applications using Spring
		MVC. Uses Tomcat as the default embedded container</description>
	<properties>
		<main.basedir>${basedir}/../../..</main.basedir>
	</properties>
	<scm>
		<url>${git.url}</url>
		<connection>${git.connection}</connection>
		<developerConnection>${git.developerConnection}</developerConnection>
	</scm>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-json</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.apache.tomcat.embed</groupId>
					<artifactId>tomcat-embed-el</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>
	</dependencies>
</project>
从上述代码可以发现, spring-boot-starter-web 依赖启动器的主要作用是打包了 Web 开发场景所需的底层所有依赖(基于依赖传递,当前项目也存在对应的依赖 jar 包)
正是如此,在 pom.xml 中引入 spring-boot-starter-web 依赖启动器时,就可以实现 Web 场景开发,而不需要额外导入 Tomcat 服务器以及其他 Web 依赖文件等。
当然,这些引入的依赖文件的版本号还是由 spring-boot-starter-parent 父依赖进行的统一管理。
Spring Boot 除了提供有上述介绍的 Web 依赖启动器外,还提供了其他许多开发场景的相关依赖,
我们可以打开 Spring Boot 官方文档,搜索 “Starters” 关键字查询场景依赖启动器

列出了 Spring Boot 官方提供的部分场景依赖启动器,这些依赖启动器适用于不同的场景开发,使用时只需要在 pom.xml 文件中导入对应的依赖启动器即可。
需要说明的是, Spring Boot 官方并不是针对所有场景开发的技术框架都提供了场景启动器,例如阿里巴巴的 Druid 数据源等, Spring Boot 官方就没有提供对应的依赖启动器。为了充分利用 Spring Boot 架的优势,在 Spring Boot 官方没有整合这些技术框架的情况下, Druid 等技术框架所在的开发团队主动 Spring Boot 框架进行了整合,实现了各自的依赖启动器,例如 druid-spring-boot-starter 等。我们在 pom.xml 文件中引入这些第三方的依赖启动器时,切记要配置对应的版本号。

三. SpringBoot执行流程源码剖析

(一)源码剖析

SpringBoot启动执行流程源码剖析(重点)_舞鹤白沙编码日志-CSDN博客

(二)SpringBoot执行流程中,主要功能实现的关键节点及流程总结

SpringBoot执行流程中,主要功能实现的关键节点及流程总结_舞鹤白沙编码日志-CSDN博客

四. 自定义Starter

SpringBoot-自定义starter_舞鹤白沙编码日志-CSDN博客

五. 源码剖析-内嵌Tomcat

SpringBoot-内嵌Tomcat源码剖析_舞鹤白沙编码日志-CSDN博客

?六. 源码剖析-自动配置SpringMVC

SpringBoot源码剖析-自动配置SpringMVC_舞鹤白沙编码日志-CSDN博客

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:54:46  更:2022-01-16 12:55:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:28:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码