springboot中文网,spring中文网站

http://www.itjxue.com  2023-01-07 00:35  来源:未知  点击次数: 

SpringBoot内置生命周期事件详解 SpringBoot源码(十)

SpringBoot中文注释项目Github地址:

本篇接 SpringBoot事件监听机制源码分析(上) SpringBoot源码(九)

温故而知新,我们来简单回顾一下上篇的内容,上一篇我们分析了 SpringBoot启动时广播生命周期事件的原理 ,现将关键步骤再浓缩总结下:

上篇文章的侧重点是分析了SpringBoot启动时广播生命周期事件的原理,此篇文章我们再来详细分析SpringBoot内置的7种生命周期事件的源码。

分析SpringBoot的生命周期事件,我们先来看一张类结构图:

由上图可以看到事件类之间的关系:

EventObject 类是JDK的事件基类,可以说是所有Java事件类的基本,即所有的Java事件类都直接或间接继承于该类,源码如下:

可以看到 EventObject 类只有一个属性 source ,这个属性是用来记录最初事件是发生在哪个类,举个栗子,比如在SpringBoot启动过程中会发射 ApplicationStartingEvent 事件,而这个事件最初是在 SpringApplication 类中发射的,因此 source 就是 SpringApplication 对象。

ApplicationEvent 继承了DK的事件基类 EventObject 类,是Spring的事件基类,被所有Spring的具体事件类继承,源码如下:

可以看到 ApplicationEvent 有且仅有一个属性 timestamp ,该属性是用来记录事件发生的时间。

SpringApplicationEvent 类继承了Spring的事件基类 ApplicationEvent ,是所有SpringBoot内置生命周期事件的父类,源码如下:

可以看到 SpringApplicationEvent 有且仅有一个属性 args ,该属性就是SpringBoot启动时的命令行参数即标注 @SpringBootApplication 启动类中 main 函数的参数。

接下来我们再来看一下 SpringBoot 内置生命周期事件即 SpringApplicationEvent 的具体子类们。

SpringBoot开始启动时便会发布 ApplicationStartingEvent 事件,其发布时机在环境变量Environment或容器ApplicationContext创建前但在注册 ApplicationListener 具体监听器之后,标志标志 SpringApplication 开始启动。

可以看到 ApplicationEnvironmentPreparedEvent 事件多了一个 environment 属性,我们不妨想一下,多了 environment 属性的作用是啥?

答案就是 ApplicationEnvironmentPreparedEvent 事件的 environment 属性作用是利用事件发布订阅机制,相应监听器们可以从 ApplicationEnvironmentPreparedEvent 事件中取出 environment 变量,然后我们可以为 environment 属性增加属性值或读出 environment 变量中的值。

当SpringApplication已经开始启动且环境变量 Environment 已经创建后,并且为环境变量 Environment 配置了命令行和 Servlet 等类型的环境变量后,此时会发布 ApplicationEnvironmentPreparedEvent 事件。

监听 ApplicationEnvironmentPreparedEvent 事件的第一个监听器是 ConfigFileApplicationListener ,因为是 ConfigFileApplicationListener 监听器还要为环境变量 Environment 增加 application.properties 配置文件中的环境变量;此后还有一些也是监听 ApplicationEnvironmentPreparedEvent 事件的其他监听器监听到此事件时,此时可以说环境变量 Environment 几乎已经完全准备好了。

可以看到 ApplicationContextInitializedEvent 事件多了个 ConfigurableApplicationContext 类型的 context 属性, context 属性的作用同样是为了相应监听器可以拿到这个 context 属性执行一些逻辑,具体作用将在 3.4.4 详述。

ApplicationContextInitializedEvent 事件在 ApplicationContext 容器创建后,且为 ApplicationContext 容器设置了 environment 变量和执行了 ApplicationContextInitializers 的初始化方法后但在bean定义加载前触发,标志ApplicationContext已经初始化完毕。

同样可以看到 ApplicationPreparedEvent 事件多了个 ConfigurableApplicationContext 类型的 context 属性,多了 context 属性的作用是能让监听该事件的监听器们能拿到 context 属性,监听器拿到 context 属性一般有如下作用:

ApplicationPreparedEvent 事件在 ApplicationContext 容器已经完全准备好时但在容器刷新前触发,在这个阶段 bean 定义已经加载完毕还有 environment 已经准备好可以用了。

ApplicationStartedEvent 事件将在容器刷新后但 ApplicationRunner 和 CommandLineRunner 的 run 方法执行前触发,标志 Spring 容器已经刷新,此时容器已经准备完毕了。

ApplicationReadyEvent 事件在调用完 ApplicationRunner 和 CommandLineRunner 的 run 方法后触发,此时标志 SpringApplication 已经正在运行。

可以看到 ApplicationFailedEvent 事件除了多了一个 context 属性外,还多了一个 Throwable 类型的 exception 属性用来记录SpringBoot启动失败时的异常。

ApplicationFailedEvent 事件在SpringBoot启动失败时触发,标志SpringBoot启动失败。

此篇文章相对简单,对SpringBoot内置的7种生命周期事件进行了详细分析。我们还是引用上篇文章的一张图来回顾一下这些生命周期事件及其用途:

由于有一些小伙伴们建议之前有些源码分析文章太长,导致耐心不够,看不下去,因此,之后的源码分析文章如果太长的话,笔者将会考虑拆分为几篇文章,这样就比较短小了,比较容易看完,嘿嘿。

【源码笔记】Github地址:

点赞搞起来,嘿嘿嘿!

公众号【 源码笔记 】专注于Java后端系列框架的源码分析。

Spring Boot教程第5篇:beatsql

BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。

beatlsql 优点

引入依赖

这几个依赖都是必须的。

整合阶段

由于springboot没有对 beatlsql的快速启动装配,所以需要我自己导入相关的bean,包括数据源,包扫描,事物管理器等。

在application加入以下代码:

在resouces包下,加META_INF文件夹,文件夹中加入spring-devtools.properties:

restart.include.beetl=/beetl-2.3.2.jar

restart.include.beetlsql=/beetlsql-2.3.1.jar

在templates下加一个index.btl文件。

加入jar和配置beatlsql的这些bean,以及resources这些配置之后,springboot就能够访问到数据库类。

举个restful的栗子

初始化数据库的表

bean

数据访问dao层

接口继承BaseMapper,就能获取单表查询的一些性质,当你需要自定义sql的时候,只需要在resouses/sql/account.md文件下书写文件:

其中“=== ”上面是唯一标识,对应于接口的方法名,“* ”后面是注释,在下面就是自定义的sql语句,具体的见官方文档。

web层

这里省略了service层,实际开发补上。

通过postman 测试,代码已全部通过。

个人使用感受,使用bealsql做了一些项目的试验,但是没有真正用于真正的生产环境,用起来非常的爽。但是springboot没有提供自动装配的直接支持,需要自己注解bean。另外使用这个orm的人不太多,有木有坑不知道,在我使用的过程中没有遇到什么问题。另外它的中文文档比较友好。

springBoot是什么?

Spring Boot可以轻松创建可以“直接运行”的独立的、生产级的基于Spring的应用程序。

我们对Spring平台和第三方保持固执己见的看法,因此您可以轻松上手。大多数Spring Boot应用程序需要最少的时间Spring配置。

其特征如下:

创建独立的Spring应用程序

直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件)

提供自以为是的“入门”依赖项以简化您的构建配置

尽可能自动配置Spring和3rd方库

提供生产就绪功能,例如指标、健康检查和外部化配置

完全无需代码生成,无需XML配置

Spring快速入门指南

第一步:启动一个新的Spring Boot项目

利用启动.spring.io创建一个“网络”项目。在“依赖项”对话框中搜索并添加“web”依赖项,如屏幕截图所示。点击“生成”按钮,下载zip,然后将其解压缩到计算机上的文件夹中。

创建的项目启动.spring.io包含弹簧靴,一个使Spring准备好在您的应用程序中工作的框架,但不需要太多代码或配置。Spring Boot是启动Spring项目的最快和最流行的方式。

第2步:添加您的代码

在IDE中打开项目并在文件夹DemoApplication.java中找到该文件

src/main/java/com/example/demo。现在通过添加下面代码中显示的额外方法和注释来更改文件的内容。您可以复制并粘贴代码或直接输入。

hello()我们添加的方法旨在获取一个名为的字符串参数name,然后将该参数与"Hello"代码中的单词结合起来。这意味着如果您“Amy”在请求中将您的姓名设置为,则响应将为“Hello Amy”.

RestController注释告诉Spring这段代码描述了一个应该在web上可用的端点。 GetMapping(“/hello”)告诉Spring使用我们的方法hello()来回答发送到该

地址的请求。最后, RequestParam告诉Springname在请求中期待一个值,但如果它不存在,它将默认使用单词“World”。

第3步:尝试一下

让我们构建并运行程序。打开命令行(或终端)并导航到您拥有项目文件的文件夹。我们可以通过发出以下命令来构建和运行应用程序:

您应该会看到一些与此非常相似的输出:

这里的最后几行告诉我们Spring已经开始了。Spring Boot的嵌入式Apache Tomcat服务器充当Web服务器,并正在侦听localhostport上的请求8080。打开浏览器,在顶部的地址栏中输入你好.你应该得到一个很好的友好回应,如下所示:

(责任编辑:IT教学网)

更多

相关mac苹果系统文章

推荐mac苹果系统文章