SpringBoot原理及源码剖析

前言

现在spring boot已成为主流的开发框架之一,相信不少读者项目都已使用了此框架,所以基于框架的使用就不再赘述,主要聊聊它的思想和原理。

基础介绍

核心思想

约定由于配置就是springboot的核心思想,又称按约定编程,本质上就死如果大家遵守其制定的规范,就无需提供额外的配置。举个栗子来讲比如项目中创建了user类,默认情况下数据库中就应该会存在一张user表,只有偏离这一约定,比如user表改成person表的时候,就需要写有关表名的映射配置。

springboot 的优点

再谈springboot的优点之前先谈谈之前的spring的优缺点
spring的优点: 主要为ioc和aop两块
spring的缺点:1. 繁重的配置文件,最初的xml配置可算得上是重量级配置,2.5版本引入了基于注解的组件扫描,3.0的时候引入了基于java的配置,至今现在大多项目都已采用注解配置来代替xml配置。
2. 项目的依赖管理耗时耗力,各个引入的组件依赖还是版兼容性都容易引起很多问题。

而springboot就针对spring的局限性进行改良和优化:

起步依赖

本质上来讲是一个maven对象模型(pom),定义了其他库的传递依赖,这些东西加一起支持某项功能,简单来讲,起步依赖就是将某种功能的坐标打包一起,并提供一些默认功能。

自动配置

指的是springboot会自动将一些配置类的bean注入到容器里,我们需要使用的地方可以用@Autowired,@Resource注解来使用它。
“自动”的意思为我们想使用某个功能包,我们只需引用,相关的配置不必要管,springboot会自动注入这些配置bean,我们只需使用即可。

源码剖析

依赖管理

思考项目中引入pom依赖为何不需要标明版本号也可以正常运行。
无非是引入了spring-boot-starter-parent和spring-boot-starter-web核心依赖,所以接下来看下核心依赖

spring-boot-starter-parent

<!-- Spring Boot父项目依赖管理 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent<11./artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

点击这个父依赖进去后,发了里面还有一个父依赖spring-boot-dependencies

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>

继续查看spring-boot-dependencies底层源文件,核心代码如下:

<properties>
<activemq.version>5.15.11</activemq.version>
...
<solr.version>8.2.0</solr.version>
<mysql.version>8.0.18</mysql.version>
<kafka.version>2.3.1</kafka.version>
<spring-amqp.version>2.2.2.RELEASE</spring-amqp.version>
<spring-restdocs.version>2.0.4.RELEASE</spring-restdocs.version>
<spring-retry.version>1.2.4.RELEASE</spring-retry.version>
<spring-security.version>5.2.1.RELEASE</spring-security.version>
<spring-session-bom.version>Corn-RELEASE</spring-session-bom.version>
<spring-ws.version>3.0.8.RELEASE</spring-ws.version>
<sqlite-jdbc.version>3.28.0</sqlite-jdbc.version>
<sun-mail.version>${
   jakarta-mail.version}</sun-mail.version>
<tomcat.version>9.0.29</tomcat.version>
<thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
<thymeleaf-extras-data-attribute.version>2.0.1</thymeleaf-extras-data-
attribute.version>
...
</properties>

可以发现该文件都常用的依赖组件进行统一的版本号管理,如activemq,spring,tomcat,都与Spring Boot 2.2.2版本一致,这也是为啥引入一些依赖无需填写版本号的原因。

spring-boot-starter-web

先查看pom源码,

<dependencies>
<dependency>
<groupId>org.springframework.boot<
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值