登陆

「源码解析」凭什么?spring boot 一个 jar 就能开发 web 项目

admin 2020-02-14 219人围观 ,发现0个评论

问题

为什么开发web项目,spring-boot-starter-web 一个jar就搞定了?这个jar做了什么?

经过 spring-boot 工程能够看到一切开箱即用的的引导模块 spring-boot-starter-xxx 都在 spring-boot-starters 子模块中,且一切的 spring-boot-starter-xxx 模块中都没有代码,都是在其他包中就完结对应的功用。首要,剖析其依靠

依靠

留意:图中的 Jakarta.xxxx 包是本来的 javax.xxxx 包,Java EE 改名为 Jakarta EE 了,spring-boot-starter-web-2.1.8.RELEASE 版别是直接依靠于hibernate-validator,spring-boot-2.2.0 版别开端运用的是 Jakarta,并用一个新模块 spring-boot-starter-validation 来办理

从依靠图中能够看到,最中心的 spring-boot 依靠于 spring-context 和 spring-core ,因而,正如官方所说,spring-boot 是根据 spring 的。

spring boot能够轻松地创立可运转的、独立的、出产级的根据spring的应用程序。咱们对spring渠道和第三方库有自己的见地,这样您就能够从最少的费事开端了。大多数spring引导应用程序只需要很少的spring装备。

能够运用 Spring Boot 创立Java应用程序,Java应用程序能够经过运用 java -jar 或更传统的war 来布置。咱们还供给了一个运转“spring脚本”的命令行东西。

咱们首要的方针是:

* 为一切spring开发供给一个更快、更简单取得的入门体会。

* 开箱即用,但要在需求开端违背默许值时敏捷改动。

* 供给一系列对大型项目通用的非功用性特性(如嵌入式服务器、安全性、流量、运转状况查看和外部化装备)。

* 肯定不需要代码生成,也不需要XML装备。

「spring-boot 源码解析」spring-boot 依靠办理

「spring-boot 源码解析」spring-boot 依靠办理整理图

spring-boot-starter(重要)

此模块是一切 spring-boot-starter-xxxx 引导器中心,非常重要!!!

包括以下模块:


org.springframework.boot
spring-boot


org.springframework.boot
spring-boot-autoconfigure


org.springframework.boot
spring-boot-starter-logging


javax.annotation
javax.annotation-api


org.springframework
spring-core


org.yaml
snakeyaml
runtime

spring-boot

spring-boot 内核,spring-boot 特性功用都是在此包完成。

spring-boot-autoconfigure

spring-boot 主动装备,供给一些常用包的默许装备

「源码解析」主动装备的这些细节不知道,甭说你会 springboot

spring-boot-starter-logging

spring-boot 默许日志引导器


ch.qos.logback
logback-classic


org.apache.logging.log4j
log4j-「源码解析」凭什么?spring boot 一个 jar 就能开发 web 项目to-slf4j


org.slf4j
jul-to-slf4「源码解析」凭什么?spring boot 一个 jar 就能开发 web 项目j

什么都没做,就引进了几个依靠,那引进这几个依靠处理了什么问题呢?经过引进这几个依靠,直接或直接的引进了 slf4j、logback日志结构所需jar,以及 log4j、jul日志东西对 Slf4j的适配。因而,引进了这个jar,工程中的日志完成运用 logback。嗯?那 log4j2 呢?本来假如想用 log4j2,还有一个 spring-boot-starter-log4j2 包供咱们挑选。

日志的详细装备,主张仍是用本来的 xml 装备,用 yaml 或 properties 欠好装备。如:logback 运用根目录下的 logback-spring.xml 装备。

snakeyaml

支撑yaml语法的生成与解析东西包

https://www.jianshu.com/p/d8136c913e52

spring-boot-starter-tomcat

没有做任何处理,直接运用嵌入式 tomcat 相关jar。spring 项目由外部 tomcat 调用 spring结构,而 spring-boot 是由 结构内部去调用嵌入式 tomcat,主被迫联系发生了转化。




javax.annotation
javax.annotation-api


org.apache.tomcat.embed
tomcat-embed-core


org.apache.tomcat
tomcat-annotations-api




org.apache.tomcat.embed
tomcat-embed-el


org.apache.tomcat.embed
tomcat-embed-websocket

spring-boot-starter-json

没有做任何处理,运用 jackson 作为默许json东西


org.springframework.boot
spring-boot-starter


org.springframework
spring-web


com.fasterxml「源码解析」凭什么?spring boot 一个 jar 就能开发 web 项目.jackson.core
jackson-databind


com.fasterxml.jackson.datatype
jackson-datatype-jdk8


com.fasterxml.jackson.datatype
jackson-datatype-jsr310


com.fasterxml.jackson.module
jackson-module-parameter-names

spring-boot-starter-validation

2.1.8.RELEASE 版别直接依靠于 hibernate-validator,没有此模块

2.2.0 版别依靠于 Jakarta.validation-api 和 hibernate-validator,并去掉了 hibernate-validator中的 javax.validation-api。

两者在运用的时分没肚兜有任何差异,是无感切换的。

validator 主动化校验




jakarta.validation
jakarta.validation-api


org.apache.tomcat.embed
tomcat-embed-el


org.hibernate.validator
hibernate-va「源码解析」凭什么?spring boot 一个 jar 就能开发 web 项目lidator


javax.validation
validation-api



参考资料

  • spring-boot-2.1.8 源码
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP