spring boot启动原理分析

这篇具有很好参考价值的文章主要介绍了spring boot启动原理分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

springboot启动类中有两个关键的地方

1.@SpringBootApplication注解

2.SpringApplication.run方法

SpringBootApplication注解分析

SpringBootApplication注解由三大注解构成,

SpringBootConfigurationEnableAutoConfigurationComponentScan

SpringBootConfiguration中其实主要就是包装了Configuration注解

EnableAutoConfiguration是启动自动配置的注解,配合springboot中的starter模块进行自动注册功能

ComponentScan扫描bean,并注册到spring ioc容器中

EnableAutoConfiguration中主要是由

AutoConfigurationPackage注解、

Import(AutoConfigurationImportSelector.class)注解两个重要组成

AutoConfigurationPackage注解里边是通过自己配置的路径或者classes去注册class,或者通过Import(AutoConfigurationPackages.Registrar.class)去注册class

AutoConfigurationImportSelector中会使用SpringFactoriesLoader.loadFactoryNames()方法去加载配置在META-INF/spring.factories文件中的EnableAutoConfiguration类(例如 spring.factories文件中org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.martin.spb.autoconfigure.configuration.MartinAutoConfiguration,此处加载的是MartinAutoConfiguration)

AutoConfigurationImportSelector类的selectImports方法会将配置文件中配置配置的class解析到string[]中并返回

SpringApplication.run方法分析

静态方法run最终会初始化一个SpringApplication的实例,然后调用实例的run方法,源码截图如下:

spring boot启动原理分析

 

有几个重要的方法需要说明下

1.获取SpringApplicationRunListeners,通过工具SpringFactoriesLoader.loadFactoryNames获取SpringApplicationRunListener.class(是不是有点眼熟,在EnableAutoConfiguration中也有使用到这个工具来获取,那里获取的是EnableAutoConfiguration.class类)

2.调用SpringApplicationRunListeners.staring方法

3.创建环境prepareEnvironment,生成ConfigurableEnvironment对象

4.Banner打印相关

5.创建上下文,createApplicationContext生成ConfigurableApplicationContext对象

6.初始化上下文,prepareContext

7.刷新上下文信息,refreshContext

8.上下文信息填充完毕,afterRefresh

9.调用SpringApplicationRunListeners.started方法

10.调用callRunners方法

11.调用SpringApplicationRunListeners.running方法

步骤6中的prepareContext方法会把springboot的入口类(就是springbootapplication注解标记的类)注册到context中。

步骤7中的refreshContext,会调用context的refresh方法,然后refresh方法中的invokeBeanFactoryPostProcessors会将注册到容器中的BeanFactoryPostProcessor类型的bean(如ConfigurationClassPostProcessor类),执行对应的postProcess方法去处理bean

需要注意的是invokeBeanFactoryPostProcessors方法中在处理bean的时候,会通过ConfigurationClassPostProcessor类的postProcessBeanDefinitionRegistry方法中的processConfigBeanDefinitions方法,此处会去遍历当前容器中所有的bean定义(getBeanDefinitionNames方法),如果该bean被Configuration注解标记,那么会对该bean进行进一步解析,其中包括处理Import注解注入的类,这里就与EnableAutoConfiguration关联上了。文章来源地址https://www.toymoban.com/news/detail-513191.html

到了这里,关于spring boot启动原理分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot启动源码分析

    版本:spring-boot-starter-parent版本为2.3.0 Spring Boot项目的启动入口是一个main方法,因此我们从该方法入手即可 跟踪run方法 这里分两步debug: new SpringApplication( primarySources ) 执行run()方法 deduceFromClasspath推断应用程序类型 该方法根据是否存在指定路径的类来推断应用程序类型。有

    2024年02月07日
    浏览(49)
  • Spring Boot 启动注解分析

    虽然我们在日常开发中,Spring Boot 使用非常多,算是目前 Java 开发领域一个标配了,但是小伙伴们仔细想想自己的面试经历,和 Spring Boot 相关的面试题都有哪些?个人感觉应该是比较少的,Spring Boot 本质上还是曾经 SSM 那一套,只是通过各种 starter 简化了配置而已,其他都是

    2024年02月13日
    浏览(42)
  • Spring Boot原理分析(二):IoC

    IoC(Inversion of Control)是一种软件设计原则,它体现了控制反转的思想。传统的程序设计中,对象之间的依赖关系由开发者在代码中直接管理,即对象自己创建和管理它所依赖的对象。而在IoC的思想下,控制权被反转,对象的创建和管理由容器来负责,对象只需要声明它所依

    2024年02月15日
    浏览(55)
  • Spring Boot源码解读与原理分析

      最近机缘巧合之下,读到了 LinkedBear 编写的《Spring Boot源码解读与原理分析》这本书,本人花了一周的时间认真研读了一下这本书,真的是受益匪浅,特此推荐给大家,好书不容错过啊。 LinkedBear 是一名资深的Java开发工程师,常年致力于底层技术的研究,同时也通过技术

    2024年02月08日
    浏览(46)
  • 【Spring Boot】SpringBoot参数验证以及实现原理

    参数验证很重要,是平时开发环节中不可少的一部分,但是我想很多后端同事会偷懒,干脆不做,这样很可能给系统的稳定性和安全性带来严重的危害。 那么在Spring Boot应用中如何做好参数校验工作呢,本文提供了小技巧以及验证实现原理,你知道几个呢? Spring Boot 提供了内

    2023年04月16日
    浏览(53)
  • Spring Boot原理分析(四):声明式事务

    Spring 提供了多种管理事务的方式,包括编程式事务管理和声明式事务管理两种方式。下面分别介绍这两种方式及其实现方式: 编程式事务管理是通过编写代码来手动管理事务。它需要在事务的开始和结束时,通过编程方式来控制事务的提交和回滚。Spring 提供了 PlatformTransa

    2024年02月17日
    浏览(48)
  • springboot启动过程原理分析

    现在绝大多数java项目都上了Springboot框架, 因此深入理解Springboot框架的运行原理,能帮助我们更好的在Springboot框架下进行业务开发,同时能学习框架中优秀的设计思想, 本文主要是通过对Springboot源码的分析, 来理解整个springboot项目的启动流程. 因为Springboot不同版本的源码有差异

    2024年02月07日
    浏览(46)
  • Spring Boot原理分析 | SpringApplication、Yaml、Properties

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Spring开源框架,轻量级的Java开发框架,解决企业级应用开发的复杂性而创建,简化开发 基于POJO的轻量级和最小侵入型编程 通过IOC,依赖注入(DI)和面向接口实现松耦合 基于切面(AOP)和惯例进行声明式编程 通过切

    2024年02月12日
    浏览(43)
  • 《Spring Boot源码解读与原理分析》书籍推荐

    Spring Boot 1.0.0 早在2014年就已经发布,只不过到了提倡“降本增效”的今天,Spring Boot才引起了越来越多企业的关注。Spring Boot是目前Java EE开发中颇受欢迎的框架之一。依托于底层Spring Framework的基础支撑,以及完善强大的特性设计,Spring Boot已成为业界流行的应用和微服务开发

    2024年02月14日
    浏览(37)
  • Spring Boot学习随笔-第一个SpringBoot项目快速启动(org.springframework.boot、@SpringBootApplication、application.yml)

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 创建第一个Module 环境要求 jdk1.8+ maven3.2+ Spring Framework 5.x+ Tomcat 9.0+ IDEA 2021 自动保存刷新pom 在resources下添加application.yml文件后,即可启动springboot应用 由于tomcat内嵌在springboot里面了,所以我们在修改端口号等设置也在配置

    2024年02月05日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包