背景 1> 大家都知道SpringBoot是通过main函数启动的,这里面跟踪代码到处都没有找到while(true),为什么启动后可以一直跑?...3> 传统的web容器比如jetty本质上是直接通过java start.jar 来启动,之后来加载spring上下文的,SpringBoot通过main函数是怎么来启动web容器的呢?...问题1分析 问题1很简单,启动后一直跑是因为启动了线程池。原理就是有非deamon的线程在跑。Java虚拟机规范定义要等所有用户线程都运行完才会退出。 所以这个原理就和下面启动线程池一样 ?...问题3分析 第三个问题是传统的web容器比如jetty本质上是直接通过java start.jar 来启动,之后来加载spring上下文的,SpringBoot通过main函数是怎么来启动web容器。...而容器启动的基本原理就是创建个线程池和网络套接字。用线程去处理套接字读写的内容。 总结 文本用带有少许说明的三个问题开场展开论述,实际是使用了麦肯锡大法中的SCQA架构。
背景: 面试经常会问道springboot启动流程或者原理,看了多数博友的文章,都是大同小异,但是面试的时候不可能那么多,所以我将启动流程总结一下。...启动流程: 1.启动springboot这需要执行SpringApplication执行类即可 2.执行的时候执行两个重要的代码,@springBootApplication和 SpringApplication.run...@springBootApplication 利用springboot的自动装载加载了META-INF下的spring.factories配置文件,将配置文件的所有类都注册到容器IOC中...SpringApplication.run 1> createApplicationContext()创建了上下文,并且同时注册spring的核心组件 2> refreshContext()启动
内部启动原理,以后难免会吃亏。...启动类,整个SpringBoot应用依然可以与之前的启动类功能对等: @Configuration @EnableAutoConfiguration @ComponentScan public class...社区推荐使用基于JavaConfig的配置形式,所以,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。...注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。...SpringBoot的启动原理基本算是讲完了,为了方便记忆,我根据上面的分析画了张图 ?
ApplicationContextInitializer SpringApplicationRunListener 只需要放在ioc容器中 ApplicationRunner CommandLineRunner 启动流程...this.mainApplicationClass) .logStarted(getApplicationLog(), stopWatch); } //整个SpringBoot...应用启动完成以后返回启动的ioc容器; return context; } catch (Throwable ex) { handleRunFailure(context...(META-INF/spring.factories) org.springframework.context.ApplicationContextInitializer=\ com.atguigu.springboot.listener.HelloApplicationContextInitializer... org.springframework.boot.SpringApplicationRunListener=\ com.atguigu.springboot.listener.HelloSpringApplicationRunListener
# SpringBoot启动配置原理 几个重要的事件回调机制 配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener...只需要放在ioc容器中 ApplicationRunner CommandLineRunner 启动流程: 1、创建SpringApplication对象 initialize(sources); private...this.mainApplicationClass) .logStarted(getApplicationLog(), stopWatch); } //整个SpringBoot...应用启动完成以后返回启动的ioc容器; return context; } catch (Throwable ex) { handleRunFailure(context...org.springframework.boot.SpringApplicationRunListener=\ com.atguigu.springboot.listener.HelloSpringApplicationRunListener
springBoot 启动配置原理 springBoot 几个重要的事件回调机制 配置在 META_INF/spring.factories ApplicationContextInitializer...new IllegalStateException(var10); } try { listeners.running(context); // 整个SpringBoot...应用启动完成以后返回启动的ioc容器 return context; } catch (Throwable var9) { this.handleRunFailure...org.springframework.boot.SpringApplicationRunListener=\ com.oy.springboot.listener.HelloSpringApplicationRunListener...: 专门来写一个自动配置模块; 启动器依赖自动配置;别人只需要引入启动器(starter) eg: mybatis-spring-boot-starter; 自定义启动器名-spring-boot-starter
所以,如果我们使用如下的 SpringBoot 启动类,整个 SpringBoot 应用依然可以与之前的启动类功能对等: 1 @Configuration 2 @EnableAutoConfiguration...注:所以 SpringBoot 的启动类最好是放在 root package 下,因为默认不指定 basePackages。...启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。...Bean,至此,通过 SpringBoot 启动的程序已经构造完成,接下来我们来探讨自动化配置是如何实现。...该方法在 springboot 启动流程——bean 实例化前被执行,返回要实例化的类信息列表。
工程,方便起见,建议什么依赖都不加,默认带入的空的 SpringBoot 工程即可。...JarLaunch 基本原理 基于前面的分析,这里考虑一个问题,能否直接通过 java BootStrap 来直接运行 SpringBoot 工程呢?...下面就来简单分析下 JarLauncher 启动时,作为启动引导类,它做了哪些事情。...基本原理分析 JarLaunch 类的定义如下: 通过代码,我们很明显可以看到几个关键的信息点: BOOT_INF_CLASSES 和 BOOT_INF_LIB 两个常量对应的是前面解压之后的两个文件目录...的启动方式,对常规 java 方式和 java -jar 等启动方式进行了简单的演示;同时简单阐述了下 JarLaunch 启动的基本工作原理。
1.1 Springboot启动: @SpringBootApplication public class ServerApplication { public static void...这个run方法会构造一个SpringApplication的实例,然后再调用这里实例的run方法就表示启动SpringBoot。...配置激活环境信息,通过从系统环境变量里取或启动时通过SpringApplication.setAdditionalProfiles(“”)添加进来的 ⑶....getApplicationEventMulticaster().multicastEvent(earlyEvent); } } } ⑾.初始化剩下的单实例(非惰性) SpringBoot...启动过程原理三 注:本篇文章时序图下载地址 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171525.html原文链接:https://javaforall.cn
很多程序员都感慨SpringBoot的到来大大解放了生产力,但是也有聪明的程序猿会多思考一下下,SpringBoot是怎么做到的约定的配置?它配置在了哪里?...又是怎么启动的作用等等一系列的问号在跟女朋友花前月下的时候,依然会时不时冒出来。...我们跟着 SpringBoot的源码来探究它的启动流程,首先,先找到这个应用程序的入口主方法,在上面打一个断点: 启动之后,F7进入到 run()方法,我的电脑是点击F7(Step into)...启动过程中初始化SpringApplication 的过程。...这篇文章主要是给大家说了下SpringBoot 启动过程中初始化SpringApplication的流程,大致可以分为四个步骤∶ 推演web应用的类型(如果没有加web依赖类型NONE) 初始化 ApplicationContextInitializer
以下是 Spring Boot 的一些核心原理:启动原理1. 自动配置Spring Boot 的一个核心特点是其自动配置。它会自动配置 Spring 应用程序基于项目中添加的 jar 依赖。...通过以上原理,Spring Boot 实现了“约定大于配置”的软件设计范式,极大地简化了基于 Spring 的应用开发和服务部署。...启动过程:Spring Boot 的启动机制设计得既简单又高效,这使得开发者能够迅速启动和运行一个独立的、生产级的应用程序。这一过程主要涉及以下几个核心步骤:1....启动入口Spring Boot 应用的启动从一个包含 main() 方法的主类开始。这个主类会使用 SpringApplication.run() 方法来启动 Spring 应用。...Spring Boot 启动过程详解Spring Boot 的启动过程是一个复杂而又精妙的流程,它负责加载配置、初始化应用上下文、自动配置和启动内嵌服务器等任务。
SpringBoot启动类: @SpringBootApplication public class MySpringbootApplication { public static void...main(String[] args) { SpringApplication.run(MySpringbootApplication.class, args); } } SpringBoot...的启动类上使用@SpringBootApplication注解标识,该注解试一个组合注解,包含多个其他注解。...其他两个注解则是SpringBoot自定义的注解。下面就来看看这两个注解的作用。...这也是为什么SpringBoot的启动类要在其他类的父包或在同一个包中。
SpringBoot 全套视频学习资源 ?...出处:http://t.cn/AiN0Y0xT SpringBoot为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开SpringBoot的神秘面纱,让它不再神秘。...启动类,整个SpringBoot应用依然可以与之前的启动类功能对等: @Configuration @EnableAutoConfiguration @ComponentScan public class...社区推荐使用基于JavaConfig的配置形式,所以,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。...注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。
SpringBoot为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开SpringBoot的神秘面纱,让它不再神秘。 ?...启动类,整个SpringBoot应用依然可以与之前的启动类功能对等: @Configuration@EnableAutoConfiguration@ComponentScanpublic class Application...社区推荐使用基于JavaConfig的配置形式,所以,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。...注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。...以上图为例,DemoApplication是和demo包同级,但是demo2这个类是DemoApplication的父级,和example包同级 也就是说,DemoApplication启动加载的Bean
在上一章我们分析了SpingBoot启动流程中实例化SpingApplication的过程。...ApplicationStartingEvent对象,其实就是监听应用启动事件。...不过这里是7个监听器对象 3.配置忽略的bean configureIgnoreBeanInfo(environment); 4.打印banner 这是SpringBoot默认的启动时的图标 Banner...; contextRefresh.end(); } } } 刷新的代码有点深,也是在这时创建了Tomcat对象,这也是SpringBoot...小结 这篇主要是介绍了SpringBoot启动过程中run()的这个过程。从中我们也可以发现一些非常好的编码习惯,大家可以在日常的工作中从模仿到内化,慢慢变成自己的东西。
) 将配置中的类ioc实例化到容器,然后创建上下文,将实例化的bean放入上下文 正文 说springboot的启动流程当然少不了springboot启动入口类 @SpringBootApplication...加载配置和启动,下面详细说明这两块。...应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。...(如下页面模版的配置) ---- 1.3springboot启动简单流程 1.3.1 当我们运行SpringApplication的main方法时,调用静态方法run()首先是实例化,SpringApplication...1.3.8 最后springboot做一些收尾工作。自此springboot的简单流程到此结束。
1.springboot的启动类入口 @SpringBootApplication @ComponentScan(basePackages ={"cn"}) public class SpringBootDemo...注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages 3) @EnableAutoConfiguration 此注解顾名思义是可以自动配置,...所以应该是springboot中最为重要的注解。...该方法在springboot启动流程——bean实例化前被执行,返回要实例化的类信息列表; 如果获取到类信息,spring可以通过类加载器将类加载到jvm中,现在我们已经通过spring-boot的starter...启动流程概览图 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171544.html原文链接:https://javaforall.cn
所以,如果我们使用如下的SpringBoot启动类,整个SpringBoot应用依然可以与之前的启动类功能对等: @Configuration @EnableAutoConfiguration @ComponentScan...---- 本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。 ?...总览 上图为SpringBoot启动结构图,我们发现启动流程主要分为三个部分: 第一部分进行SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器; 第二部分实现了应用具体的启动方案...Bean,至此,通过SpringBoot启动的程序已经构造完成,接下来我们来探讨自动化配置是如何实现。...该方法在springboot启动流程——bean实例化前被执行,返回要实例化的类信息列表。
SpringBoot提供了CommandLineRunner、ApplicationRunner两个监听接口,通过这两个接口可以在应用启动时做特殊处理。...使用两者的好处在于,可以方便的使用应用启动参数,根据参数不同做不同的初始化操作。 自定义启动监听由程序实现,并且标识@Component注解,交于IOC管理。...在SpringBoot启动成功后就会执行实现类的回调。
作者:MyBug 一、前言 使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。...本文的目的就是一步步分析springboot的启动过程,这次主要是分析springboot特性自动装配。...…… 花在搭建一个初始项目,可能一个小时就过去了或者半天救过了,但是用了SpringBoot之后一切都会变得非常便捷,下面我们首先来分析一下SpringBoot的起步依赖以及自动配置。...4.Bean的发现 springboot默认扫描启动类所在的包下的主类与子类的所有组件,但并没有包括依赖包的中的类,那么依赖包中的bean是如何被发现和加载的?...spring容器,这就是前文所说的springboot默认扫描启动类所在的包下的主类与子类的所有组件。
领取专属 10元无门槛券
手把手带您无忧上云