Spring Boot 快速入门2 ——SpringBoot运行原理分析

news/2024/7/5 21:29:22 标签: springboot

一、SpringBoot运行原理

父依赖

我们再查看 Spring Boot 项目中 pom.xml 可以看出,所有的 Spring Boot 项目 直接或间接的 依赖于一个 父项目  spring-boot-starter-parent  ,主要是管理项目的资源及其插件。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
    <relativePath/> 
</parent>

进入到spring-boot-starter-parent,发现还有一个父依赖:

这个才是真正管理 Spring Boot 应用中所有依赖版本的地方,Spring Boot 的版本控制中心。

我们在导入依赖的时候,默认不需要写版本号,就是因为版本控制中心,但是如果导入的包没有在依赖中管理者,就需要手动去控制版本了。

二、tarter场景启动器

我们先来看一下 项目中 导入的依赖项:

spring-boot-starter-* :*就某种场景,只要引入starter,这个场景的所有常规需要的依赖我们都自动引入,所有的导入的依赖,底层都是 依赖于 spring-boot-starter

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>2.3.4.RELEASE</version>
  <scope>compile</scope>
</dependency>

spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件。

        <!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

Spring Boot 将所有的场景全部整合起来,集成了一个个的 启动器 Starter, 我们只需要在项目中引入需要的 Starter 就行,所有相关的依赖就会导入进来,供我们使用,当然我们也可以自定义 Starter.

三、启动类

@SpringBootApplication 是 Spring Boot 框架中的一个核心注解,用于简化 Spring Boot 应用的配置。当你在一个类上使用了这个注解,它实际上是一个组合注解,包含了多个其他的 Spring 注解,用于自动配置和启用 Spring Boot 的一些特性。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
@SpringBootApplication
public class SpringBootDemoApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
​
}
  • @SpringBootApplication: 作用在类上,说明被标注的类是 SpringBoot 的主启动类, Spring Boot 就会这个类的main 方法,

        注:@SpringBootApplication 注解作用的类 应该在所有包的上一级。

  • @SpringBootConfiguration: Spring的配置类注解,标注在某个类上,表示这是一个springboot 配置类 (复合注解)

    • @Configuration: 说明这是一个配置类,配置类就是对应 Spring 的 xml 配置文件。

    • @Component:说明启动类本身就是一个组件,用来负责启动应用。

  • @EnableAutoConfiguration:开启自动装配的注解

    • @AutoConfigurationPackage:用来自动装配的注解。

    • @Import({AutoConfigurationPackages.Registrar.class}) : 自动配置 ‘包组件’,Spring底层注解@import ,给容器中导入一个组件,Registrar.class 作用:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器 

  • @Import({AutoConfigurationImportSelector.class}) :给容器导入组件,AutoConfigurationImportSelector :自动配置导入选择器

四、SpringApplication.run分析

SpringBootApplication.java

@SpringBootApplication
public class SpringBootApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }
​
}

SpringBootApplication.run方法主要分两部分:

一部分是SpringApplication的实例化,二是run方法的执行。

SpringApplication这个类主要做了以下四件事情:

(1)推断应用的类型是普通的项目还是Web项目

(2)查找并加载所有可用初始化器 , 设置到initializers属性中

(3)找出所有的应用程序监听器,设置到listeners属性中

(4)推断并设置main方法的定义类,找到运行的主类

run方法流程分析:


http://www.niftyadmin.cn/n/5534604.html

相关文章

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核&#xff0c;4.4后直接使用了Chrome。 二、重要类 以WebView类为基础&#xff0c;WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维&#xff0c;在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现&#xff1a;坐标校正&#xff0c;我们如何使漫无目的鼠标点击变得有序化和可控化呢&#xff1f; 目录 一、从鼠标监听到获取坐标 1.MouseListener和Mouse…

FPGA PCIe加载提速方案

目录 1.bit流压缩 2.flash加载速度 3.Tandem模式 1.bit流压缩 set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 2.flash加载速度 打开bitstream setting&#xff0c;设置SPI的线宽和速率&#xff08;线宽按原理图设置&#xff0c;速率尽可能高&#xff09…

等保测评:全面保障信息系统安全的必要举措

等保测评&#xff08;信息安全等级保护测评&#xff09;是评估信息系统安全等级的重要过程&#xff0c;旨在确保信息系统能够抵御各种安全威胁&#xff0c;保障信息的机密性、完整性和可用性。以下是一篇关于等保测评的文章&#xff0c;内容清晰、分点表示&#xff0c;并参考了…

捷瑞数字业绩波动性明显:关联交易不低,募资必要性遭质疑

《港湾商业观察》施子夫 5月22日&#xff0c;山东捷瑞数字科技股份有限公司&#xff08;以下简称&#xff0c;捷瑞数字&#xff09;及保荐机构国新证券披露第三轮问询的回复&#xff0c;继续推进北交所上市进程。 从2023年6月递表开始&#xff0c;监管层已下发三轮审核问询函…

焦化超低排平台组成部分

焦化行业作为重工业的重要组成部分&#xff0c;其环保问题一直备受关注。近年来&#xff0c;随着环保意识的提升和技术的不断进步&#xff0c;朗观视觉焦化超低排平台应运而生&#xff0c;成为推动焦化行业绿色发展的重要力量。本文将深入剖析焦化超低排平台的组成部分&#xf…

【Linux】孤儿进程|守护进程|Shell脚本设置守护进程开机自启

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ Orphan孤儿进程…

NAPI篇【4】——NAPI应用点亮一个LED

OpenHarmony的NAPI功能为开发者提供了JS与C/C不同语言模块之间的相互访问&#xff0c;交互的能力&#xff0c;使得开发者使用C或者C语言实现应用的关键功能。如操作开发板中某个GPIO节点的状态&#xff08;OpenHarmony并没有提供直接操作GPIO口状态的API&#xff09;&#xff0…