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

过年做那个网站能致富网站搭建的步骤

过年做那个网站能致富,网站搭建的步骤,wordpress邮件功能用不了,个人网站模板htmlSpring Boot 源码学习系列 ApplicationListener 详解 引言往期内容主要内容1. 初识 ApplicationListener2. 加载 ApplicationListener3. 响应应用程序事件 总结 引言 书接前文《初识 SpringApplication》#xff0c;我们从 Spring Boot 的启动类 SpringApplication 上入手我们从 Spring Boot 的启动类 SpringApplication 上入手了解了 SpringApplication 实例化过程。其中《BootstrapRegistryInitializer 详解》 和 《ApplicationContextInitializer 详解》博文中Huazie 已经带大家详细分析了 BootstrapRegistryInitializer 和 ApplicationContextInitializer 的加载和初始化过程如下还有 2.5 还未详细分析 那本篇博文就主要围绕 2.5 的内容展开详细分析一下 ApplicationListener 的加载和处理应用程序事件的逻辑。 往期内容 在开始本篇的内容介绍之前我们先来看看往期的系列文章【有需要的朋友欢迎关注系列专栏】 Spring Boot 源码学习 Spring Boot 项目介绍 Spring Boot 核心运行原理介绍 【Spring Boot 源码学习】EnableAutoConfiguration 注解 【Spring Boot 源码学习】SpringBootApplication 注解 【Spring Boot 源码学习】走近 AutoConfigurationImportSelector 【Spring Boot 源码学习】自动装配流程源码解析上 【Spring Boot 源码学习】自动装配流程源码解析下 【Spring Boot 源码学习】深入 FilteringSpringBootCondition 【Spring Boot 源码学习】OnClassCondition 详解 【Spring Boot 源码学习】OnBeanCondition 详解 【Spring Boot 源码学习】OnWebApplicationCondition 详解 【Spring Boot 源码学习】Conditional 条件注解 【Spring Boot 源码学习】HttpEncodingAutoConfiguration 详解 【Spring Boot 源码学习】RedisAutoConfiguration 详解 【Spring Boot 源码学习】JedisConnectionConfiguration 详解 【Spring Boot 源码学习】初识 SpringApplication 【Spring Boot 源码学习】Banner 信息打印流程 【Spring Boot 源码学习】自定义 Banner 信息打印 【Spring Boot 源码学习】BootstrapRegistryInitializer 详解 【Spring Boot 源码学习】ApplicationContextInitializer 详解 主要内容 注意 以下涉及 Spring Boot 源码 均来自版本 2.7.9其他版本有所出入可自行查看源码。 1. 初识 ApplicationListener 我们先来看看 ApplicationListener 接口的源码【spring-context-5.3.25.jar】 FunctionalInterface public interface ApplicationListenerE extends ApplicationEvent extends EventListener {void onApplicationEvent(E event);static T ApplicationListenerPayloadApplicationEventT forPayload(ConsumerT consumer) {return event - consumer.accept(event.getPayload());} }从上述代码我们可以看到 ApplicationListener 接口被 FunctionalInterface 注解修饰。 知识点 FunctionalInterface 是 Java 8 中引入的一个注解用于标识一个函数式接口。函数式接口是只有一个抽象方法的接口常用于实现 Lambda 表达式和方法引用。 使用 FunctionalInterface 注解可以向编译器指示该接口是一个函数式接口从而在编译时进行类型检查确保该接口 只包含一个抽象方法。此外该注解还可以为函数式接口生成特殊的方法如默认方法default method和 静态方法static method这些方法可以在接口中提供更多的功能这里就不赘述了感兴趣的朋友可以自行查阅相关函数式接口的资料。 ApplicationListener 是 Spring 中应用程序事件监听器实现的接口。它基于观察者设计模式的java.util.EventListener 接口的标准。在注册到 Spring ApplicationContext 时事件将进行相应的过滤只有匹配的事件对象才会使该监听器被调用。 在 ApplicationListener 接口中我们可以看到它定义了一个 onApplicationEvent(E event) 方法当监听事件被触发时onApplicationEvent 方法就会被调用执行。onApplicationEvent 方法一般用于处理应用程序事件参数 event 为 ApplicationEvent 的子类也就是具体要响应处理的各种类型的应用程序事件。例如当某个特定事件发生时你可能想要记录日志、更新数据库、发送电子邮件等等。 另外ApplicationListener 接口还提供了一个静态方法 forPayload(ConsumerT consumer)用于创建一个新的 ApplicationListener 实例。这个方法接受一个 ConsumerT 类型的参数这个参数是一个函数接口它接受一个泛型参数 T并对其执行一些操作。通过这个方法你可以将一个 Consumer 函数作为参数然后返回一个对应的事件监听器。这个监听器会在事件发生时调用 Consumer 函数处理事件的有效载荷【即事件中包含的有效信息或数据】。 2. 加载 ApplicationListener setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));上述代码是 SpringApplication 的核心构造方法中的逻辑它用于加载实现了 ApplicationListener 接口的监听器实例集合并将该监听器实例集合设置到 SpringApplication 的 listeners 变量中。 private ListApplicationContextInitializer? initializers;我们进入 getSpringFactoriesInstances 方法查看如下 我们看到了如下的代码 SpringFactoriesLoader.loadFactoryNames(type, classLoader);这里是通过 SpringFactoriesLoader 类的 loadFactoryNames 方法来获取 META-INF/spring.factories 中配置 key 为 org.springframework.context.ApplicationListener 的数据 我们以 spring-boot-autoconfigure-2.7.9.jar 为例 # Application Listeners org.springframework.context.ApplicationListener\ org.springframework.boot.autoconfigure.BackgroundPreinitializer3. 响应应用程序事件 这里我们需要查看 SpringApplication 的 run(String... args) 方法如下所示 我们看上面的 SpringApplicationRunListeners 其内的 listeners 变量是 SpringApplicationRunListener 接口的集合如下所示 而 SpringApplicationRunListener 接口的一个实现就是 EventPublishingRunListener 类该类的作用就是根据 Spring Boot 程序启动过程的 不同阶段 发布对应的事件然后由不同的实现 ApplicationListener 接口的应用程序监听器来处理对应的事件【有关 SpringApplicationRunListener 监听器的内容我们后续博文中会详细介绍这里不展开了】。 如下图是 SpringApplicationRunListeners 类中的方法它们分别对应了 Spring Boot 程序启动过程中要发布的不同阶段的事件的逻辑。 starting 当 run 方法第一次被执行时该方法会立即被调用可用于非常早期的初始化工作environmentPrepared 当 environment 准备完成在 ApplicationContext 创建之前该方法被调用contextPrepared 当 ApplicationContext 构建完成资源还未被加载时该方法被调用contextLoaded 当 ApplicationContext 加载完成未被刷新之前该方法被调用started 当 ApplicationContext 刷新并启动之后CommandLineRunner 和 ApplicationRunner 未被调用之前该方法被调用ready 当所有准备工作就绪run 方法执行完成之前该方法被调用failed 当应用程序出现错误时该方法被调用 我们以 starting 方法的逻辑为例看一下 ApplicationStartingEvent 事件发布并被处理的过程。 void starting(ConfigurableBootstrapContext bootstrapContext, Class? mainApplicationClass) {doWithListeners(spring.boot.application.starting, (listener) - listener.starting(bootstrapContext),(step) - {if (mainApplicationClass ! null) {step.tag(mainApplicationClass, mainApplicationClass.getName());}}); }我们继续看 doWithListeners 方法 结合上面的截图我们重点看下这行 (listener) - listener.starting(bootstrapContext)这里时调用了 SpringApplicationRunListener 接口的 starting 方法 这里的 multicastEvent 方法就是用来发布一个指定的应用程序事件比如这里发布的就是 ApplicationStartingEvent 事件。 总结 本篇 Huazie 带大家详细分析了 ApplicationListener 的加载和处理应用程序事件这对于后续的 SpringApplication 运行流程的理解至关重要。
http://www.w-s-a.com/news/953472/

相关文章:

  • 八里河风景区网站建设内容摘要网站开发基础学习
  • 上海做外贸网站的公司智慧团建网站登陆平台
  • 上海商务网站建设如何做的网站手机可以用吗
  • 产品推广营销方案seo推广员招聘
  • 做水利网站需要多少钱山东市网站建设
  • 做网站找哪里如何修改wordpress颜色
  • 招商加盟网站系统站长工具 seo查询
  • 工商局网站清算组备案怎么做电商培训机构
  • 做好门户网站建设做本地团购网站怎么样
  • wordpress主题和预览不同20条优化防疫措施方案
  • 艾奇视觉网站建设网站推广需要几个人做
  • 2008 iis 添加网站wordpress固定链接标签加上页面
  • 宁波企业网站制作推荐网站优化人员
  • 大型资讯门户网站怎么做排名沈阳建设工程有限公司
  • 开发中英文切换网站如何做江苏网站建设费用
  • 网站论文首页布局技巧桥东网站建设
  • 网站开发项目经理工资北京微信网站
  • 山西山西省建设厅网站微信备份如何转换为wordpress
  • 同城网站开发实用网站模板
  • 郑州做网站哪家公司好国外购买空间的网站有哪些
  • 资讯cms网站有那些餐饮品牌策划设计公司
  • 网站策划选题网站布局优化
  • 网站建设3000字wordpress 微信 主题制作
  • 代做寄生虫网站网站菜单效果
  • 网站备案为什么这么慢目录更新 wordpress
  • 视频在线制作网站Wordpress 外链图片6
  • 网站域名后缀有什么用网站建设的投资预算怎么写
  • 化妆品网站建设网站惠州网站关键字优化
  • 保定网站制作企业下载天眼查企业查询官网
  • 中山企业网站建设公司制作一个景点的网站