SpringBoot运行流程及基本用法

SpringBoot启动运行流程 文章目录SpringBoot启动运行流程1. 调用构造函数1.1 源非空判断1.2 推断web应用类型1.3 加载ApplicationContextInitializer1.4 加载ApplicationListener1.5 推断main方法所在的类2. 执行run方法2.1 程序计时开始2.2 设置java.awt.headless系统变量2.3 加载所有SpringApplicationR... 阅读详情

        前面说了Spring、SpringBoot、Mybatis这三个框架,而SpringBoot是用来整合各种框架的,简单来说它就是框架的框架。

特点:

  1. 创建独立的Spring应用程序
  2. 嵌入的Tomcat,无需部署WAR文件
  3. 简化Maven配置
  4. 自动配置Spring
  5. 提供生产就绪型功能,如指标,健康检查和外部配置

pom.xml拆解:

        要搞清楚SpringBoot运行流程,我们首先就必须要搞清楚的是它的pom.xml文件的构造,下面我们来简单说一下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.jt</groupId>
    <artifactId>springboot_demo1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_demo1</name>
    <description>Demo project for Spring Boot</description>


    <properties>
        <java.version>1.8</java.version>
        <!--跳过测试类打包-->
        <skipTests>true</skipTests>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!--Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

最上面那一段是头信息:标识了命名空间和xml遵循的标签规范和xml书写时需要遵循的语法,创建项目自带,无需改动

<parent>标签时因为当初没有指定统一的jar包的版本号,各导各的,最后整合的时候导致jar包冲突,SpringBoot进行整合指定了统一的版本依赖信息,所以这里导入的时SpringBoot的版本号,它在底层已经指定过了jar包的版本号,所以加入之后只需要导入jar包,而不需要写jar包具体的版本号了

<groupId>及下面的一些项目信息是本项目的坐标以及版本号,可以根据信息在本地仓库中定位该项目,以及本项目可以作为其他项目的依赖包进行导入

<properties>显示依赖的JDK版本号,里面的<skipTests>true</skipTests>语句可以在项目打包时跳过测试类进行打包(运行项目时不需要测试类,而且测试类里出现的一些假报错会导致打包失败)

<dependencies>标签是导入jar包的地方,这里要提到的一个SpringBoot的一个拆箱即用的思想,省略或者避免了写原来需要写的大量的配置文件,而在这里只需要添加一个启动类就可以了,注意按需导入,需要什么包导入什么包

<build>maven的依赖及工具API,在项目打包部署发布时需要,否则会影响项目的发布

启动类注解@SpringBootApplication拆解:

首先上一个结构图助于理解(摘自csdn:闪耀的太阳)

进入@SpringBootApplication可发现有元注解和另外三个注解

 元注解:加在注解上的注解

  • @Target(ElementType.TYPE) 该注解对类有效
  • @Retention(RetentionPolicy.RUNTIME) 该注解在运行期有效
  • @Documented 生成源码时 是否动态生成注释文档
  • @Inherited 标识注解是否可以被继承

@ComponentScan:当SpringBoot启动时,会实例化很多对象,但是因为SpringBoot兼容了非常多的第三方框架,有个别的框架加入后会影响整个代码的流程,所以用这个直接把对程序有影响的排除在外

@SpringBootConfiguration:进入发现除了元注解外还有一个@Configuration注解,它的作用是配置文件/配置类/整合第三方框架的配置,它修饰了@SpringBootConfiguration,而@SpringBootConfiguration又修饰了主启动类@SpringBootApplication,证明启动类也是一个配置类,它会扫描用户自己的配置类信息,并且实例化对象:@Configuration + @Bean

@EnableAutoConfiguration:进入它发现除了元注解外还有 @AutoConfigurationPackage和@Import注解。还记得我们上次发的项目经过了IOC后在XML里需要配置包扫描吗?在SpringBoot整合后包扫描没有消失,只不过@AutoConfigurationPackage替我们去做了,简化了配置文件的编写,该注解会动态的获取主启动类所在的包及子包路径并开启扫描,所以我们写代码都应该在启动类的同包或者子包中。另一个注解@Import我们回顾xml文件引入jar包后进行少量配置或者可以直接使用,但是它只负责加载而不负责运行,而该注解的作用就是根据依赖信息,根据SpringBoot的内部配置信息依次加载执行,它会依次匹配所有启动类和所写的依赖进行匹配,如果成功会执行jar里的内容,不匹配则跳过继续向下执行,知道SpringBoot程序加载完成!下图理解:

 到这里SpringBoot的运行流程就说完了!

 SpringBoot的基本用法

为属性动态赋值:在SpringBoot启动时默认加载yml文件,我们可以在yml里配置信息

语法:

  1. 语法1: 数据结构 key-value结构
  2. 语法2: 写法 key:(空格)value
  3. 语法3: yml文件 默认字符集是UTF-8编码 中文不乱码
  4. 语法4: yml文件 有层级效果 注意缩进

例:

server:
  port: 8080

msg:
  hello: "老铁666"

 在Controller里有一个@RestController注解,意思是将此类交给Spring管理

还有一个注解@Value,获取yml文件里的坐标,以上结合使用可实现动态赋值

规则:

  1. 当Spring容器启动时,会加载YML配置文件. 会将内部的key-value结构 加载到spring维护的内存空间中
  2. @Value功能,从spring容器中根据key 动态赋值
  3. springel表达式 简称:spel

使用示例

@Value("${msg.hello}")
private String msg;

返回msg即可,在项目已经打包完成时也可以通过修改yml文件来修改返回的值,class文件不能修改,把文件改为zip,修改后再改会jar即可。

properties文件

        业务有时会需要动态赋值,如果将大量的业务数据写到yml文件中 导致代码混乱.最好的方式应该指定properties文件 为业务赋值.

语法:

 #数据结构: key=value

#注意事项: 不要添加""号 本身就是字符串.

#字符集编码: 写法采用utf-8,程序读取时采用ISO-8859-1 pro.msg=配置信息

写法如下:

pro.msg=123

动态赋值:

加入在类上@PropertySource(value="classpath:/msg.properties",encoding = "utf-8")指定文件的目录,注意,这里指的是class目录,所以是根目录,后面因为中文会乱码,所以手动指定编码为u8

    @Value("${pro.msg}"
    private String promsg;

整合Mybatis配置核心文件:

#端口配置
server:
  port: 8080

#配置数据源
spring:
  datasource:
    #如果使用高版本驱动 则添加cj
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#Spring整合Mybatis
mybatis:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #导入映射文件
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

测试类:

测试类也需要写在启动类所在的包下

测试类上需要加@SpringBootTest注解:

原理:

  1. 测试类执行时,会根据SpringBoot配置动态启动Spring容器
  2. Spring容器启动时,会加载所有的注解和配置类,所有的对象都会加载到Map集合中 通过@SpringBootTest这个注解可以动态获取里面的对象

到这里就结束了,很困!!

满怀希望就会所向披靡0_0

SpringBoot 之启动流程 加载应用程序上下文扫描应用程序中的所有组件自动配置应用程序环境启动嵌入式Web服务器在下面的章节中,我们将逐一分析这些步骤的源代码。在本文中,我们深入分析了 SpringBoot 应用程序的启动过程的源代码。我们了解了 SpringBoot 如何加载应用程序上下文、扫描应用程序中的所有组件、自动配置应用程序环境以及启动嵌入式Web服务器。这些步骤的源代码展示了 SpringBoot 如何简化应用程序的开发和部署。 阅读详情

相关推荐

SpringBoot启动流程

本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。 一、SpringBoot启动流程图 二、SpringBoot启动入口 @EnableScheduling @EnableAsync @SpringBootApplication @EnableAspectJAutoProxy @ComponentScan(basePackages = { "cn.gov.zcy.demand", "cn.gov.zcy.

weixin_64314555的博客 2万+

原来 Spring Boot 流程是这么走的

Spring Boot简介 Spring Boot 是什么 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 spring大家都知道,boot是启动的意思。所以,spring boot其实就是一个启动spring项目的一

养歌的博客 4763

SpringBoot启动流程:从main方法到应用运行的全过程

开发者可以通过多种方式自定义SpringBoot的启动过程,如实现ApplicationContextInitializer、ApplicationListener、CommandLineRunner等接口,或者编写自定义的BeanFactoryPostProcessor和BeanPostProcessor。/*** 自定义ApplicationRunner示例*/@Component@Overridelogger.info("应用启动完成,执行初始化操作...");

程序媛学姐的博客 1634

9千字长文带你了解SpringBoot启动过程--史上最详细 SpringBoot启动流程-图文并茂

来自面试官发自内审深处的灵魂拷问:“说一下springboot的启动流程”; 一脸懵逼的面试者:“它简化了spring的配置,主要是因为有自动装配的功能,并且可以直接启动,因为它内嵌了tomcat容器”; 面试官:“嗯, 没错,这是 它的一些概念,你还没回答我的问题,它是怎么启动的,启懂时都经过了哪些东西?”; 一脸懵逼的面试者:“额~~~不知道额····,我用的很熟练,但是不知道它里面做了哪些事情!”; 面试官:“了解内部原理是为了帮助我们做扩展,同时也是验证了一个人的学习能力,如果你想让自己的职业道路.

weixin_44947701的博客 5万+

快速在本地运行SpringBoot项目的流程介绍

本篇文字的内容可能十分小众,主要针对于有其他人的开源的SpringBoot项目,需要在本地上运行的uu,会给大家介绍一下SpringBoot项目启动的流程,以及我初次接触SpringBoot项目启动时遇到的问题。没错,我就经历了这个很小众的过程。虽然一般这种项目都会带有.md文件,但是毕竟是人家的开源项目,.md文件只会告诉你大致的流程,不会手把手教你,对于没有基础,但又由于某些原因需要运行SpringBoot项目的uu来说,那可太折磨人了,一点点的小问题就可能会折磨你好久。话不多说,进入正题。

m0_74825614的博客 2572

Springboot启动过程详解

Springboot启动过程详解

水w的博客 1万+

历年CSP-J(NOIP普及组)考点分析与分类汇总(纯干货)

noip/csp-j历年真题考点分类

weixin_42358969的博客 1万+

SpringBoot启动流程总结

一直很好奇SpringBoot这么一个大怪物,启动的时候做了哪些事情,然后看了很多老师讲的教学视频,然后自己想好好整理一下,做下学习笔记下次也方便自己阅读 1、首先从main方法开始看 public static void main(String[] args) { //代码很简单SpringApplication.run(); SpringApplication.run(Cons...

mnicsm的博客 6万+

Jetson Orin NX深度学习环境配置全攻略:从JetPack到PyTorch避坑指南

本文提供Jetson Orin NX深度学习环境配置的完整避坑指南。重点讲解如何正确利用JetPack SDK作为系统基石,使用Miniforge管理Python环境,并安装与CUDA版本严格匹配的PyTorch特供版本。通过详细的步骤和验证方法,帮助开发者在ARM架构的嵌入式平台上高效搭建稳定的AI开发工作站。

yolo5detector的博客 272

LVGL v9的lv_scale控件实战:5分钟打造动态仪表盘(附完整代码)

本文详细介绍了LVGL v9中lv_scale控件的实战应用,通过5个关键步骤快速打造动态仪表盘。文章涵盖核心特性解析、代码实现、样式定制及性能优化,适用于工业HMI、智能家居等场景,并附完整代码示例。

gin88的博客 262

springboot mvc运行流程

springbootmvc运行流程

weixin_43931625的博客 1071

基于Spring Security 6的OAuth2 系列之二 - 客户端--非代码演示授权码模式

至此,我们就使用浏览器+postman工具演示了通过授权码模式去获取Gitee的用户信息。这过程中,我们只是遵循OAuth2的流程,就能够实现授权方法。那么接下来,我们采用代码方式来实现这个流程。

代码让AI扣 1813

SpringBoot启动流程之运行时监听器

SpringBoot启动过程:上一节我们讨论SpringApplication实例化的过程,也就是上图1-5步骤,本节我们讨论6-9的关键步骤,现在主要讲是run方法里面的过程。

weixin_45653328的博客111 1320

【WRF模拟】土地利用类型的确定:最大覆盖法/瓦片法

土地利用类型的确定:最大覆盖法/瓦片法

WW、forever的博客 1529

到底什么是Harness工程?一篇文章从入门到企业落地全解析

随着OpenClaw爆火,Harness Engineering(驾驭工程)成为AI编程时代的热门概念,很多小白对其感到陌生。本文用通俗类比和真实案例,避开复杂术语,从基础定义入手,讲清Harness Engineering的核心逻辑——人类工程师设计“约束系统”(马具),让AI模型(烈马)安全高效地完成代码工作,同时拆解其核心组件、企业落地场景和实战成果,帮小白快速入门,读懂这项能解放人力、提升效率的新技术,轻松掌握它的核心价值和落地思路。

program哲学 3287

SpringBoot 启动流程

方法来启动 Spring Boot 应用程序。该方法接受两个参数,第一个参数是启动类的类对象,第二个参数是主方法的参数。方法中做了一系列操作来完成项目启动所需的初始化Spring容器、启动内置tomcat、启动应用程序以及通知监听者等步骤。总的来说,Spring Boot的启动过程是一个复杂的流程,从启动类的Main方法中调用。启动类必须使用 @SpringBootApplication 注解标记该类。方法开始,然后在SpringApplication对象的。方法来执行项目启动的后续操作。

qq_33807380的博客 9554

uniapp [安卓苹果App端] - 实现获取请求手机位置权限+开启定位获取经纬度/省市区地址等,检测权限手机定位是否开启并引导用户同意授权,uniApp app端调用本机开启本机定位权限及IP属地

uni-app,手机定位权限,安卓Android,苹果ios,uniapp获取本机位置权限,uni-app获取用户定位数据,uniapp APP获取用户IP属地定位,判断权限,权限被拒绝了怎么办,苹果ios系统无法开启定位,获取定位权限报错,uniapp定位获取省市区,UNI-APP如何开启手机定位功能并获取经纬度,不依赖地图第三方插件组件,打包上架后如何获取,真机运行无法获取定位,安卓和ios权限获取,判断权限检查,正式打包,详细教程,根据获取当前经纬度,再根据经纬度去定位具体省市区,自定义基座打包能成功

🏆 前端领域优质创作者 1万+

总结:Springboot启动流程

一、总结 1、关于SpringApplication SpringBoot的启动主要是通过实例化SpringApplication来启动的。 2、实例化SpringApplication时做了什么? SpringApplication的构造方法做了几件事情: 推断WebApplicationType,主要思想就是在当前的classpath下搜索特定的类 搜索META-INF\spring.factories文件配置的ApplicationContextInitializer的实现类 搜索MET

w2009211777的专栏 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot系列之【启动流程详解】

文章目录前言一、SpringBoot特点二、SpringBoot启动类入口1.注解:@SpringBootApplication@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan2.main方法SpringApplication#run实例化SpringApplication对象SpringApplication.run(java.lang.String...)三、SpringBoot启动事件EventPublishingRunLis

qq_21609191的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[SpringBoot系列]SpringBoot打包与运行

本文设计程序的打包和运行 SpringBoot程序打包失败处理 命令行启动常见问题及解决方案

十八岁讨厌编程的博客 1810

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

springboot的基本用法

springboot的基本用法 1.springboot比eclipse里面建立maven项目方便了不少,它不需要进行太多的配置文件,pom文件中也不许要写太多 2.建立maven项目,这里一定要注意必须联网还有选好编程语言 3.Available是选好项目的依赖,然后就直接finish这样一个springboot的maven项目就建立了 4.这里面基本和eclipse差不多了,但是配置文件的命名可是有规范的,在src/main/resources中创建maven项目时 application必须以这个为开

shangtongc的博客 725

SpringBoot项目创建及运行

SpringBoot是由Pivotal团队提供的全新框架,是一个基于Spring的Java框架,目的是简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。如果使用的是社区版IDEA,需要下载Spring Assistant(Spring 助⼿) 插件才能创建 Spring Boot 项目,如下图所示: 安装好之后,就有了 Spring Assistant 选项了,如下图所示: 接下来就可以开始创建项目了。第一步选择 Spring Assist

澄白易的博客 8831

SpringBoot 2.0 系列002 --运行流程分析

SpringBoot 2.0 系列002 --运行流程分析1. SpringBoot运行的几种方式1.1 开发环境,右键配置类main方法运行配置如下,引入相关pom依赖,运行main方法即可启动简单的SpringBoot web应用。//开启SpringBoot自动注入配置 等价于原来的SpringBootApplication @EnableAutoConfiguration //开启Res...

前往JAVA架构的路上 3358

SpringBoot的基本用法

1、创建项目 选择Spring Initializr下一步->完成 2、自动导入依赖(需要用到一个插件) (1)下载插件 (2) 选择Edit Starters 自行选择需要的,之后就会自动添加依赖而不需要手写 加完后 加载下(如果有标红) ,同步,确保组件导入 ...

快乐星球的博客 3588

camunda流程引擎基本使用(笔记)

camunda流程引擎的基本使用与集成

weixin_46949627的博客 3万+
上一篇: 常用的工具
下一篇: MybatisPlus学习
希望不要秃头的0.0
博客等级 码龄6年 64粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值