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

目录
相关文章
|
6月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
6月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
6月前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
503 3
|
6月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
683 2
|
7月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
6343 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
存储 JSON Java
831 0
|
7月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
2517 0
|
前端开发 Java Maven
Spring 和 Spring Boot 之间的比较
本文对比了标准Spring框架与Spring Boot的区别,重点分析两者在模块使用(如MVC、Security)上的差异。Spring提供全面的Java开发基础设施支持,包含依赖注入和多种开箱即用的模块;而Spring Boot作为Spring的扩展,通过自动配置、嵌入式服务器等功能简化开发流程。文章还探讨了两者的Maven依赖、Mvc配置、模板引擎配置、启动方式及打包部署等方面的异同,展示了Spring Boot如何通过减少样板代码和配置提升开发效率。总结指出,Spring Boot是Spring的增强版,使应用开发、测试与部署更加便捷高效。
1567 11
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
629 0

热门文章

最新文章