简析SpringBoot启动执行流程

简介: 简析一下SpringBoot的启动流程

SpringBoot已经成为Spring的主流框架了,经典的自动配置大大解放了开发的双手,今天就来简析一下SpringBoot的启动流程:

话不多说,直接撸铁:正常我们的SpringBoot启动类:

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

启动类的关键在于 @SpringBootApplication 这个注解,那我们就进去看下这个注解:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
   ......
}

从代码片段中可以看出,@SpringBootApplication 是一个复合型注解的接口,有一些默认接口方法,我们只关心三个注解,分别是:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

①. @SpringBootConfiguration :

@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类;JavaConfig形式的IOC配置类。

②. @EnableAutoConfiguration:

作用简而言之就是将符合条件的@Configuration加载到IOC容器中去,这个注解的幕后使者是SpringFactoriesLoader,这个类的功能是:从META-INF/Spring.factories加载配置

③.@ComponentScan:

自动扫描,ComponentScan做的事情就是告诉Spring从哪里找到bean;

例:@ComponentScan({"com.in28minutes.package1","com.in28minutes.package2"})
@Configuration
public class SpringConfiguration {
相比于xml:
<context:component-scan base-package="com.in28minutes.package1, com.in28minutes.package2" />

SpringApplication.run()的启动执行流程:

1. 实例化对象SpringApplication
2. 初始化对象,方法开始执行——>SpringFactoriesLoader加载——>SpringApplicationRunListener监听main方法的每个执行节点——>started()方法
3. 配置Enviroment(PropertySource及profile)
4. 创建ApplicationContext(ApplicationContext是Spring框架中一个很重要的接口,它扩展了BeanFactory,SpringBoot启动过程中,SpringApplication通常会选择合适的ApplicationContext实现类)
5. 遍历所有的SpringApplicationRunListener的contextPrepared()方法,通知ApplicationContext准备好了,可以进行下一步了
6. ★ 核心:将配置的@EnableAutoConfiguration获取所有配置及自定义的IOC,加载到准备完毕的ApplicationContext中去
7. ApplicationContext装填完毕后,调用refresh()方法,完成IOC的最后一道工序
8. 遍历执行SpringApplicationRunListener的finished()方法,到此SpringBoot启动完成。


相关文章
|
9月前
|
前端开发 Java 应用服务中间件
SpringBoot-Run启动流程
探索Spring Boot启动流程,从加载配置、创建应用上下文、自动配置到启动内嵌服务器。启动类是入口点,`@SpringBootApplication`标记启动,`SpringApplication.run`启动应用。自动配置基于条件注解配置Bean,应用上下文由`SpringApplication`创建并刷新。内嵌服务器如Tomcat随应用启动,简化部署。理解此流程有助于深入掌握Spring Boot。
235 2
|
9月前
|
缓存 Java 程序员
springboot的启动流程总结
springboot的启动流程总结
|
26天前
|
XML Java 应用服务中间件
SpringBoot项目打war包流程
本文介绍了将Spring Boot项目改造为WAR包并部署到外部Tomcat服务器的步骤。主要内容包括:1) 修改pom.xml中的打包方式为WAR;2) 排除Spring Boot内置的Tomcat依赖;3) 添加Servlet API依赖;4) 改造启动类以支持WAR部署;5) 打包和部署。通过这些步骤,可以轻松地将Spring Boot应用转换为适合外部Tomcat服务器的WAR包。
124 64
SpringBoot项目打war包流程
|
4月前
|
前端开发 Java 数据安全/隐私保护
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
文章通过一个简单的SpringBoot项目,详细介绍了前后端如何实现用户登录功能,包括前端登录页面的创建、后端登录逻辑的处理、使用session验证用户身份以及获取已登录用户信息的方法。
626 2
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
|
6天前
|
IDE Java 应用服务中间件
spring boot 启动流程
Spring Boot 启动流程简介: 在使用 Spring Boot 之前,启动 Java Web 应用需要配置 Web 容器(如 Tomcat),并将应用打包放入容器目录。而使用 Spring Boot,只需运行 main() 方法即可启动 Web 应用。Spring Boot 的核心启动方法是 SpringApplication.run(),它负责初始化和启动应用上下文。 主要步骤包括: 1. **应用启动计时**:使用 StopWatch 记录启动时间。 2. **打印 Banner**:显示 Spring Boot 的 LOGO。 3. **创建上下文实例**:通过反射创建
|
1月前
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
117 0
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
1月前
|
XML 前端开发 Java
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
85 0
|
8月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的销售项目流程化管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的销售项目流程化管理系统附带文章源码部署视频讲解等
84 3
|
4月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
73 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
4月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
323 2