这篇我们来梳理下SpringBoot源码的一些主要项目及用其在创建一个SpringBoot项目是怎样使用的。
首先我们来看下创建一个简单的springbooot项目需要引用哪些maven包,再分析平下这些包(要具体了解如何创建一个springBoot项目可以看下其他的博文)。
1、最开始我们需要引用parent包:
org.springframework.boot spring-boot-starter-parent 2.0.1.RELEASE
2、然后我们需要引用关于mvc的starter
org.springframework.boot spring-boot-starter-web
只需要这两个maven引用,同时也不需要再加一些其他的配置,保持其的默认配置。如果你愿意,在application.properties中也可以不进行任何设置,并且这个项目的也不需要像springMVC那样经由tomcat去被动启动,其直接就能启动(当然也可以用其他的服务器)。那么这些SpringBoot是怎样的去处理的呢。在这个SpringBoot源码解读系列我们就来关注这些问题,同时在这个系列我们就不像原来分析spring、springMVC那样具体的分析其的具体源码了,关于SpringBoot源码这里我们就梳理其主要的逻辑。因为看了一下其的实现逻辑,其主要是在Spring及SpringMVC的基础上去去拓展的,也就是Spring及对应SpringMVC解决的问题。对于Spring来说,目前我的理解就是怎样去创建一个Bean,定义SpringMVC来说就是要怎样去进行配对例如处理器、处理器适配器、视图、以及一些拓展的数据库配置、AOP这些的配置使用,但其实这些配置都是一些相对固定的模式,所以SpringBoot就采用默认大于配置、要配置什么就引用什么包,然后springBoot去默认加载,就不需要主动去设置一些固定的内容了。
前面主要是简单说了一些个人的理解(可能有些误区?毕竟对于这些源码目前我的梳理是对于其核心主要的内容进行梳理,可能会有一些误区,欢迎指正),下面我们回归正题。
我们先来看下spring-boot-starter-parent
org.springframework.boot spring-boot-dependencies 2.0.1.RELEASE ../../spring-boot-dependencies
其内部又引用了spring-boot-dependencies
........ 1.16.20 ................... org.springframework.boot spring-boot 2.0.1.RELEASE ch.qos.logback logback-access ${logback.version}
这里主要是(POM文件还有一些其他的设置)确认整个springBoot项目引用的版本号,因为我们知道我们再使用springBoot构建项目的时候,引用maven 包的时候一般不用主动去设置版本号的。(这里需要理解maven的
所以这里这个spring-boot-starter-parent的作用主要就是就是确认整个的springBoot项目的版本引用。
下面我们来看下spring-boot-starter-web的依赖引用
org.springframework.boot spring-boot-starters ${revision}
......... org.springframework.boot spring-boot-starter org.springframework spring-web org.springframework spring-webmvc
1、 parent
可以看到其parent是引用的spring-boot-starters
org.springframework.boot spring-boot-parent ${revision} ../spring-boot-parent
spring-boot-starter ..........spring-boot-starter-thymeleaf spring-boot-starter-tomcat ............spring-boot-starter-web ...........
这里又引用前面的spring-boot-parent,同时这个spring-boot-starters又通过modules设置这些子项目
2、dependencies
spring-boot-starter
org.springframework.boot spring-boot-starters 2.0.5.RELEASE
org.springframework.boot spring-boot 2.0.5.RELEASE compile ............ org.springframework.boot spring-boot-autoconfigure 2.0.5.RELEASE compile ......... org.springframework spring-core 5.0.9.RELEASE compile
这里的dependencies主要引用了两个dependency:spring-boot、spring-boot-autoconfigure。
通过上面创建一个SpringBoot项目的引用,我们来看下SpringBoot源码的结构(这里只看下一些主要的模块,详细的可以看下其他的博文)
注:我们将spring-boot-starter-web等同于上面指明的spring-boot-starter-activemq,因为spring-boot-starter-web位于下面部分,看不到(从项目结构来说两者是一样的)。
首先注意下一些只有POM文件的项目,因为这表明这个模块主要是用于maven项目的引用、管理的,然后 我们再通过前面分析的springBoot项目引用来看下springBoot项目的源码结构
1、首先是spring-boot-dependencies用dependencyManagement对整个dependecys的版本进行管理,然后是spring-boot-parent对spring-boot-dependencies的引用,同时spring-boot-parent也会dependencyManagement一些公共的包,来完成springBoot项目的版本号设置。
2、然后就是spring-boot-starter-web来进行starter所需的引用了,下面我们来梳理下spring-boot-starter-web:
spring-boot-starter-web的parent是spring-boot-starters
org.springframework.boot spring-boot-starters 2.0.5.RELEASE
org.springframework.boot spring-boot-parent 2.0.5.RELEASE ../spring-boot-parent org.springframework.boot spring-boot-starters 2.0.5.RELEASE
然后starter的dependen(例如spring-boot-starter-web)除了引用与该start本身功能相关的包,例如
org.springframework spring-web org.springframework spring-webmvc
还会引用spring-boot-starter(这个应该是每个如同spring-boot-starter-web--spring-boot-starter-xxx,都会引用)
org.springframework.boot spring-boot-starter 2.0.5.RELEASE compile
然后在这个spring-boot-starter中会引用:
org.springframework.boot spring-boot 2.0.5.RELEASE compile org.springframework.boot spring-boot-autoconfigure 2.0.5.RELEASE compile
所以对于一个spring-boot-starter-web(xxx)来说,其parent为spring-boot-starters通过其去进行对应版本号等的处理,然后再dependency spring-boot-starter来引入一些自动配置的一些注解,例如如果我们自定义配置一些Bean的时候有用到一些注解都是在spring-boot-autoconfigure这个模块中,例如
这个下一篇我们再主要梳理下这些内容
以上这些就是对SpringBoot源码一些比较主要模块结构的了解,下一篇我们再梳理下这些模块的一些主要逻辑及代码处理。