当前位置: 首页 > news >正文

手机网站图片切换特效网页素材网

手机网站图片切换特效,网页素材网,互联网推广企业,Wordpress用七牛云存储在上一篇《spring-boot启动源码分析(一)之SpringApplication实例构造》后,继续看了一个月的Spring boot启动源码,初步把流程看完了,接下来会不断输出总结,以巩固这段时间的学习。同时也希望能帮到同样感兴趣…

在上一篇《spring-boot启动源码分析(一)之SpringApplication实例构造》后,继续看了一个月的Spring boot启动源码,初步把流程看完了,接下来会不断输出总结,以巩固这段时间的学习。同时也希望能帮到同样感兴趣的同学。话不多说,进入正题

环境介绍:

spring boot版本:2.7.18

主要starter:spring-boot-starter-web

SpringApplication实例构造后,就开始调用它的run方法,开始启动spring boot。方法如下:

本篇主要介绍上图中的4步,SpringApplicationRunListener会重点讲

1、创建BootStrapContext

这里主要是创建一个DefaultBootstrapContext实例,然后使用构造方法中从spring.fatories中获取的BootstrapRegistryInitializer对其初始化。只引入spring-boot-starter-web的spring boot没有在spring.fatories中配置BootstrapRegistryInitializer,所以这里没有实际的初始化动作。但在这里我们可以支持自定义BootstrapRegistryInitializer对其进行扩展

2、设置系统变量“java.awt.headless”为true

Java的Headless模式允许在没有图形界面的环境中运行程序,从而提高性能和节省资源。

3、从spring.factories中获取SpringApplicationRunListener

这里我们有见到老朋友getSpringFactoriesInstances,就是从spring.factories获取接口的实现类,之后实例化返回。之后我们依然会频繁的接触它。因为spring.factories中定义了19种接口,每种接口都对应一块功能。

这里返回的是SpringApplicationRunListeners,它包含了SpringApplicationRunListener的集合以及一个ApplicationStartup实例。

SpringApplicationRunListener目前只有一个EventPublishingRunListener,用于发布SpringApplicationEvent事件。而ApplicationStartup是SpringApplication中传入的用于记录启动过程数据的,默认是一个DefaultApplicationStartup,无实际操作,但支持在SpringApplication实例化后,执行run方法之前通过SpringApplication.setApplicationStartup设置自定义的ApplicationStartup。

SpringApplicationRunListeners主要是用于事件的发布,会在不同的启动阶段发布对应的事件:

如SpringApplicationRunListeners实例化后发布的staring、环境准备好后的environmentPrepared、上下文准备好后的contextPrepared等

实际的事件发布是交给List<SpringApplicationRunListener> listeners的,即每个SpringApplicationRunListener都调用各自方法发布相应的事件。如starting方法就是调用SpringApplicationRunListener.starting方法:

所以我们也可以在spring.fatories中添加我们自己的SpringApplicationRunListener,在不同的阶段发布自己的事件。

我们接着看EventPublishingRunListener,首先看一下它的构造方法

在构造方法中主要实例化了一个内部的事件广播器,同时添加SpringApplication中包含的监听器(这个在SpringApplication构造方法中从spring.fatories中获取过)

而它又是怎么发布事件的呢:

我们可以看到每个阶段都有对应的事件示例,通过内部的事件广播器进行广播。

getApplicationListeners(event, type):事件广播会先从监听器列表中筛选支持此事件的监听器,通常如果监听器不是SmartApplicationListener子类,没有重写自己的supportsEventType,那么只是简单判断ApplicationListener中的泛型类型是否是对应事件的子类。EventPublishingRunListener发布的事件都是继承SpringApplicationEvent,所以如果和BackgroundPreinitializer一样以如下方式定义,那么将监听它发布的所有事件。

而像LoggingApplicationListener,实现GenericApplicationListener(它继承SmartApplicationListener),那么会根据supportsEventType方法判断是否支持此事件

上图即为LoggingApplicationListener的supportsEventType实现,可以看到只要事件类型是在·EVENT_TYPES中定义的事件都监听,即:

4、listeners.starting发布开始事件

上面已经把SpringApplicationRunListeners发布事件的流程详细介绍了一遍,开始事件后发布后会有三个监听器支持此事件

(1)LoggingApplicationListener

这里主要是获取日志系统会从spring.factories获取LoggingSystemFactory

按顺序实例化其中的日志系统工厂类(有引入对应日志依赖才能实例化),所以默认是LogbackLoggingSystem.Factory。然后工厂类会创建对应的日志系统实例。loggingSystem.beforeInitialize()会进行初步的初始化,像logback会获取日志上下文,如果首次获取这里就会进行xml的解析等。

同时此时日志系统只是初步初始化,所以会增加一个拒绝所有日志打印的TurboFilter。

(2)BackgroundPreinitializer

此监听器并没有实际响应开始事件,主要响应的是ApplicationEnvironmentPreparedEvent、ApplicationReadyEvent、ApplicationFailedEvent

(3)DelegatingApplicationListener

代理监听器是代理通过context.listener.classes配置的自定义的监听器,它实际也没有响应开始事件:multicaster需要在响应ApplicationEnvironmentPreparedEvent才实例化

http://www.yayakq.cn/news/372507/

相关文章:

  • 怎么在网站中做视频背景企业管理培训课程讲座大全
  • 网站系统升级中软件库合集资料网站
  • 网站首页flash制作中国工程建设造价管理协会网站
  • 自己做副业可以抢哪个网站网页设计培训 多少钱
  • 重点专业建设网站重庆忠县网站建设报价
  • 网站建设经费预算计划做网站 信科网络
  • 专门做高端网站设计的云华设计山西山西省建设厅网站首页
  • 成都网站搭建公司网站空间免费
  • 支付网站建设费会计分录龙游建设工程信息网站
  • 模板建站郑州制作网站价格
  • 瑞安网站网站建设校园网站如何建立
  • 票务网站开发西部数码个人网站
  • 怎样做某个网站有更新的提醒WordPress的jquery版本过低
  • 网站建设图总结中国住房和城乡建设部网站造价师注册
  • 梓潼移动网站建设网站后台怎么更新网站
  • 手机友好型网站黑龙江企业信息系统
  • 苍南县住房和城乡规划建设局网站传奇在线玩网页版
  • 有哪些做网站的品牌西宁建站
  • 零基础学做网站难吗南宁网站制作费用
  • 网站设计首页框架图片seo全称
  • 学技术网站广东商城网站建设价格
  • 外贸网站建设书籍网站原型设计
  • 网站禁止ip访问东莞市专注网站建设品牌
  • 免费网站生成wordpress 主题 更换
  • 简约个人网站柳州建设网经济适用房
  • 商务网站建设综合实训网站制作价格
  • 麟游住房和城市建设局网站深圳装饰公司网站
  • 北京网站开发工程师招聘网wordpress主题 手机主题
  • 内蒙古建设工程交易服务中心网站php网站开发简历
  • 火炬开发区网站建设东莞企业网站推广怎么做