深入理解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注入配置,不要以为这不可能,因为我们公司有大神就是这么做的,所以说思路在某种成都上比源码更重要。

目录
相关文章
|
3天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
1天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
1天前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
8天前
|
设计模式 Java Spring
Spring Event 的幕后
Spring Event 基于观察者模式,实现模块间松散耦合的通信。通过事件(Event)、事件发布者(Publisher)和事件监听器(Listener)三个核心组件,Spring Event 可以轻松实现业务解耦。Spring 容器在启动时会初始化 `ApplicationEventMulticaster`,扫描并注册所有事件监听器,通过调用 `multicastEvent()` 方法将事件广播给所有注册的监听器。
|
29天前
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
155 12
|
23天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
44 2
|
29天前
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
82 10
|
26天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
87 5
|
1月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
44 0
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
245 2