Springboot启动原理分析

1.Springboot启动原理分析

1.1 继承spring-boot-starter-parent,就相应的继承了一些版本控制的东西

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

点击spring-boot-starter-parent,发现它又继承spring-boot-dependencies

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.5.0</version>
  </parent>

Springboot启动原理分析

点击spring-boot-dependencies,里面有maven 依赖的相应版本依赖引入
Springboot启动原理分析

1.2 看一下spring-boot-starter-web帮我们做了什么事

里面引入了springmvc,tomcat等等东西
Springboot启动原理分析

点一下spring-boot-starter-json看一下
Springboot启动原理分析

点一下看看spring-boot-starter-tomcat看一下,里面嵌套了tomcat的相关东西
Springboot启动原理分析

2.Springboot的自动配置

1.点击注解@SpringBootApplication
Springboot启动原理分析

2.再点击注解@SpringBootConfiguration,结果发现其实就是一个配置类,也就是说SpringBootApplication本身就具备一个配置类configuration的功能
Springboot启动原理分析

3.点击1出来的截图上的注解@EnableAutoConfiguration,这是springboot自动配置的核心注解

4.componetScan组件扫描,约定了这个启动类所在的包,及其所有子包都进行扫描

其实@SpringBootApplication注解是可以代替3个注解的作用
Configuration,ComponetScan,EnableAutoConfiguration的作用

3.Springboot的核心注解EnableAutoConfiguration

是否可以自动配置
Springboot启动原理分析
点击AutoConfigurationImportSelector
Springboot启动原理分析

点击进去,找到最核心的getCandidateConfigurations
Springboot启动原理分析

当前的类所在的jar包的META-INF/spring.fact
org.springframework.boot.autoconfigure
Springboot启动原理分析

Springboot启动原理分析

找到spring.factories
Springboot启动原理分析

举个例子找servlet关键字里的ServletWebServerFactoryAutoConfiguration,发现里面有一个EnableConfigurationProperties(ServerProperties.class)
Springboot启动原理分析

Springboot启动原理分析

发现里面都是配置
具体默认的值在哪呢
是在和META-INF/spring-configuration-metadata.json里

{
      "name": "server.port",
      "type": "java.lang.Integer",
      "description": "Server HTTP port.",
      "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties",
      "defaultValue": 8080
    }

4.autoconfigure

覆盖默认配置
application.properties

server.port=8081
server.servlet.context-path=/demo
上一篇:spring boot 配置 log4j2日志


下一篇:一线互联网企业高级Java工程师面试题大全,Java面试重点问题