spring boot 启动原理_U启au3源码

(4) 2024-06-19 11:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
spring boot 启动原理_U启au3源码,希望能够帮助你!!!。

前言

本篇文章会介绍Spring Boot 的基本原理 以及以及一些使用,常见的配置方式等,如何从单一架构延申到现在的前后端分离(垂直应用架构)的项目,从网站流量很小到现在的网站流量动则几百万上下的 发展, 加速前端的架构。到后面 的分布式服务架构。都是提升效率。

概述

通过 Spring Boot,您可以轻松创建独立的、生产级基于 Spring 的应用程序,您可以“运行”这些应用程序。我们对Spring平台和第三方库持固执己见的观点,因此您可以以最小的麻烦开始。大多数弹簧启动应用需要最少的弹簧配置。

特点

  • 创建独立的弹簧应用程序,

  • 直接嵌入雄猫,码头或底托(无需部署WAR文件)

  • 提供固执己见的“启动器”依赖项,以简化构建配置

  • 尽可能自动配置春季和第三方库

  • 提供生产就绪功能,如指标、运行状况检查和外部化配置

  • 绝对无需代码生成,也无需 XML 配置

这都是spring boot 的 提供给我们的优秀点,也是好用的地方。

而微服务的集成等,都是 集成来自于springboot  这是主流的一种方式。一定是逃不过的。

这里就涉及到一个概念,单体架构,soa架构 微服务架构

单体架构

all in one 将一个应用中所有服务都封装到一个应用中,无论什么系统,都将数据库,web等功能模块放到一个可执行文件中

SOA架构

面向服务的体系结构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

微服务架构

微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。

所以spring boot 也是基于上面框架的 基础 ,管理所有对象的同时,并且 在基础上 集成其他中间件,这也是spring boot  构建出来的。

简单的使用

Getting Started (spring.io)

我们需要从创建一个 Maven pom.xml文件开始。pom.xml是用于构建项目的配方。打开您喜欢的文本编辑器并添加以下内容:

 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0-SNAPSHOT</version> </parent>

mvn dependency:tree命令打印项目依赖项的树表示形式。您可以看到spring-boot-starter-parent本身不提供任何依赖项。要添加必要的依赖项,请编辑pom.xml并在parent部分正下方添加spring-boot-starter-web 依赖项:

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

最简单的使用方式

要完成我们的应用程序,我们需要创建一个 Java 文件。默认情况下,Maven 从 src/main/java 编译源代码,因此您需要创建该目录结构,然后添加一个名为 src/main/java/MyApplication.java以包含以下代码:

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableAutoConfiguration public class MyApplication { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } 

@SpringBootApplication

在项目中最常见的设置方式

也可以使用 @SpringBootApplication  注解,好处是里面可以配置   可以重写的操作

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第1张  

 

  • @SpringBootConfiguration ,本质是一个@Configuration配置类(类似一个SpringContext.xml文件),可以通过@Bean定义方法定义Bean。
  • @EnableAutoConfiguration 自动配置类  
  • @ComponentScan 组件扫描类
@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { //略 }

继承  SpringBootServletInitializer   方式,对启动 以及打包的设置

@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(XXXApplication】.class); }

springboot项目,若打包成war包,使用外置的tomcat启动

1、需要继承 org.springframework.boot.context.web.SpringBootServletInitializer类

2、然后重写configure(SpringApplicationBuilder application)方法

Spring boot 配置文件

properties的方式

Common Application Properties (spring.io)

包括核心的一些配置文件方式,

主要是 key=value 的方式

YAML 文件的方式

YAML作为属性配置文件,通常以 .yml 或者 .yaml 为后缀名。

YAML对语法的要求比较严格:

大小写敏感

使用缩进表示层级关系

缩进不允许使用tab键,必须使用空格缩进

缩进的空格数不重要,但是同级元素必须左侧对齐

‘#’ 表示注释

字符串无需加引号,如果加,单引号对与双引号对都可以
spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第2张

 

并且根据具体的值  会有提示 出来  对应的数据源等提示方式

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第3张

 

有个  @configurationproperties 配置  方式

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第4张

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第5张

 

 对于自定义的方式。 可以绑定 到具体的类上面  利用这个注解

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第6张

  只要对应的名字相同即可

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第7张

 SpringbootApplication 的启动源代码

  springapplication.run 方法,之前的  初始化  当前 这个类要做的事情。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第8张

到主函数中,包括 resourceloader  设置等等

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第9张

 在属性的时候设置的 ,包括所有的  看存储的地方

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第10张

 

进入 解析 判断 解析当前应用程序的类型。  

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第11张

 

  到了后面的,加载   资源等。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第12张

 

这里涉及到  读取 所有的 加载 所有的    自动配置的文件数据,  加载类。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第13张

这里用来加载出来 对应 的  key 和value值,  并且反射出来。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第14张

 

这个方法中 进行 创建 实例化,    采用forname的方式, 找到  对象, 进行实例化类。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第15张

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第16张

  排好序,然后  将初始化的类,进行放到容器中。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第17张

 

找到主类。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第18张

 

准备完毕过后,进行 开始 启动  run方法

这里stopwatch 计算时间。 

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第19张

设置所有的awt 图像 化,

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第20张

 

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第21张

 前置准备的过程

加载 springapplicationrunlistener

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第22张

 加载监听的动能。 提供  监听 的

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第23张

 spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第24张

 

 把所有的listener  的factory  文件加载 所有的listener  类中数据。

包括部分的启动代码

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第25张

 

在  启动中加载所有的listener 数据 

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第26张

 

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第27张

监听器, eventpublish lish

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第28张

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第29张

 都可以做一些监听功能,某些操作事件的监听功能等等,都是有些地方重要的事情。

准备当前环境 信息,包括所有的 环境配置等等。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第30张

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第31张 

 包括所有的eventpubish 事件监听器  进行监听等等。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第32张

前置的处理等等。

后面的部分更多的是使用spring 中,包括  applicationcontext   创建 ,以及  refreshcontext  这也是 spring中很重要的部分,   这部分可以在spring框架中去查看。

spring boot 启动原理_U启au3源码_https://bianchenghao6.com/blog__第33张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复