深入理解Spring IOC之扩展篇(十)、SpringBoot中重要event介绍,顺便简单讲下SB的启动流程(二)

简介: 深入理解Spring IOC之扩展篇(十)、SpringBoot中重要event介绍,顺便简单讲下SB的启动流程(二)

上一篇我们讲到了run方法中的prepareContext那里,并且已经讲了四种SpringBoot的事件,接下来我们把这些在本篇讲完.


ApplicationStartedEvent


我们继续来顺着run方法往下看:


// 执行AbstractApplicationContext的refresh方法,即所谓的刷新动作
      refreshContext(context);
            // 刷新之后做的事情,现在是空实现,也就是说其实P都没干
      afterRefresh(context, applicationArguments);
            // 到这里应用已经启动起来了,因此也该调用stopWatch的stop方法了
      stopWatch.stop();
            // 打印启动成功的日志
      if (this.logStartupInfo) {
        new StartupInfoLogger(this.mainApplicationClass)
            .logStarted(getApplicationLog(), stopWatch);
      }
            // 发布代表启动成功的事件,这也是我们重点关注的
      listeners.started(context);
            // 调用所有的ApplicationRunner和CommandLineRunner类型的bean
      callRunners(context, applicationArguments);


run方法到这里,难一点的只有refreshContext了,这一步主要也是因为AbstractApplicationContext的refresh方法难,这个方法,可以参考我之前写的深入理解Spring IOC系列,本篇不会去讲这个方法,否则我又得写几万字。我们直接来看我们关注的发布事件这里,其实里面代码还是很简单,我们重点是要明白这个事件发布的意义,这代表着我们的SpringBoot应用已经正儿八经的跑起来了,你可以在这里去做你想做的任何业务上的操作了,比如一些应用系统的初始化动作等。


ApplicationFailedEvent

这个事件是因为我们之前讲过的代码中,任意一个地方抛出了异常,才导致发布这个事件,如果你是去基于SpringBoot去扩展框架,那你应该会关注这个事件,这个在业务场景中应该用的会很少。


ApplicationReadyEvent

事实上这个和ApplicationStartedEvent事件差不多,发布ApplicationStartedEvent到发布ApplicationReadyEvent的之间其实也就调用了ApplicationRunner和CommandLineRunner这两种类型的bean而已,很多时候我们的应用都没有这两种类型的bean。

至此,SpringBoot中几个重要的event就说完了,run方法大概做了什么事情我们也说完了。这里还需要纠正一下上篇文章中有个说的不是很严谨的地方,我上篇文章的结尾说ApplicationPreparedEvent是你可以去拉取配置的最后时机,其实这么说有那么一点不严谨,为什么呢?因为如果你是基于Spring去进行扩展,你是完全可以在AbstractApplicationContext中refresh方法中去拉取,你甚至还能在注入完了再拉取完了单独给bean注入配置,不要以为这不可能,因为我们公司有大神就是这么做的,所以说思路在某种成都上比源码更重要。

目录
打赏
0
0
0
0
54
分享
相关文章
SpringBoot项目打war包流程
本文介绍了将Spring Boot项目改造为WAR包并部署到外部Tomcat服务器的步骤。主要内容包括:1) 修改pom.xml中的打包方式为WAR;2) 排除Spring Boot内置的Tomcat依赖;3) 添加Servlet API依赖;4) 改造启动类以支持WAR部署;5) 打包和部署。通过这些步骤,可以轻松地将Spring Boot应用转换为适合外部Tomcat服务器的WAR包。
145 64
SpringBoot项目打war包流程
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. **创建上下文实例**:通过反射创建
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
47 6
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
407 12
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
104 0
SpringBoot整合Flowable【04】-  通过代码控制流程流转
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代码控制流程的方法。
133 0
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
86 8
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
494 12
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
168 10