SpringBoot学习记录(3)

SpringBoot监听机制

SpringBoot的监听机制,其实是对java提供的事件监听机制的封装

java监听机制

  • java中的事件监听机制定义了以下几个角色

    • 事件:Event,继承java.util.EventObject类的对象

    • 事件源:Source,任意对象Object

    • 监听器:Listener,实现java.util.EventListener对象

SpringBoot监听机制

SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作

监听器接口:ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRunner

  • ApplicationContextInitializer
    • 这个接口允许在应用程序上下文被创建之前对其进行定制和配置
    • 可以用来做一些初始化的工作,例如添加自定义属性源、激活特定的Spring配置文件等
    • 通过实现这个接口,可以在Spring应用程序上下文被创建之前对其进行自定义设置
补充:在java中,"上下文对象"通常是指一种数据结构或对象,用于存储和传递在特定环境中的相关信息或状态。这个概念在不同的技术和框架中有不同的具体实现和用法。

在一些情况下,上下文对象可以是一个普通的 Java 对象,用于存储和传递方法调用或处理过程中的相关信息。例如,在多线程编程中,可以创建一个包含线程状态、线程局部变量等信息的上下文对象,以便在方法调用之间传递这些信息。

在一些框架和技术中,上下文对象可能具有更具体的含义和功能。例如:
1.Servlet 上下文对象:在 Java Web 开发中,Servlet 上下文对象是用于存储 Servlet 环境相关信息的对象。它可以通过 ServletContext 接口来访问,其中包含了 Servlet 容器的一些配置信息、Servlet 的初始化参数等。

2.Spring 应用程序上下文对象:在 Spring 框架中,应用程序上下文对象是 Spring IoC 容器中的一个重要组成部分,用于管理和维护 Bean 的定义、依赖关系等信息。它可以通过 ApplicationContext 接口来访问,其中包含了应用程序中所有 Bean 的定义、配置信息等。

3.数据库连接上下文对象:在使用 JDBC 进行数据库操作时,可以创建一个数据库连接上下文对象,用于管理数据库连接的状态、事务信息等。

总的来说,上下文对象是一种在特定环境中存储和传递相关信息的通用机制,在不同的技术和框架中具有不同的实现和用法。它可以帮助组织和管理程序执行过程中的状态和信息,提高代码的灵活性和可维护性。
  • SpringApplicationRunListener

    • 这个接口用于监听SpringBoot应用程序的启动过程中的事件,例如应用程序启动、运行失败等
    • 可以用来实现一些高级的应用程序启动时的逻辑,例如记录日志、发送通知等
    • 通过实现这个接口,可以在应用程序启动的各个阶段添加自定义行为
  • CommandLineRunner

    • 这是一个函数式接口,用于在SpringBoot应用程序启动后立即执行一些逻辑
    • 它提供了一个**‘run’**方法,该方法会在SpringBoot应用程序启动后立即执行,且可以访问应用程序启动时的命令行参数
    • 可以用来实现一些与命令行相关的初始化工作,例如加载数据、执行特定任务等
补充:函数式接口(Functional Interface)是指仅包含一个抽象方法的接口。Java 8 引入了函数式接口的概念,以支持函数式编程风格和Lambda表达式。函数式接口通常用于表示可以作为Lambda表达式传递的类型,或者作为方法引用的目标类型。

函数式接口具有以下特征:
1.只包含一个抽象方法:函数式接口只能包含一个未实现的抽象方法。它可以包含多个默认方法或静态方法,但只能有一个抽象方法。
2.可以使用@FunctionalInterface注解:虽然不是必须的,但通常将函数式接口标记为@FunctionalInterface注解,以便编译器检查它是否符合函数式接口的要求。如果一个接口标记为@FunctionalInterface,但它不符合函数式接口的要求(例如包含多个抽象方法),编译器将产生错误。
3.Lambda表达式和方法引用的目标类型:函数式接口可以被用作Lambda表达式的类型。Lambda表达式提供了一种简洁的语法来实现函数式接口的抽象方法。同样,函数式接口也可以是方法引用的目标类型。
  • ApplicationRunner
    • 与**‘CommandLineRunner’**类似,也是用于在SpringBoot应用程序启动后立即执行一些逻辑的接口
    • 不同之处在于,‘ApplicationRunner’’run’方法接受的参数是’ApplicationArguments’,而不是简单的字符串数组
    • **‘ApplicationArguments’**提供了更丰富的访问应用程序启动时的参数信息的能力,例如访问非标准选项、参数值的类型转换等

要使上面四种监听器接口中的ApplicationContextInitializer和SpringApplicationRunListener生效,需要在配置META-INF文件夹和其中的spring.factories

SpringBoot启动流程分析

参考12-SpringBoot流程分析-初始化_哔哩哔哩_bilibili的P29-P30

SpringBoot监控

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、bean加载情况、配置属性、日志信息等

使用步骤

  • 导入依赖坐标
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 访问

    http://localhost:8080/actuator
    

SpringBoot项目部署

SpringBoot项目开发完毕后,支持两种方式部署到服务器:

  • jar包
  • war包

相关推荐

  1. SpringBoot学习记录(3)

    2024-05-14 10:54:06       14 阅读
  2. SpringBoot学习记录(1)

    2024-05-14 10:54:06       9 阅读
  3. vue3学习记录

    2024-05-14 10:54:06       33 阅读
  4. SpringBoot3框架,入门学习

    2024-05-14 10:54:06       15 阅读
  5. vue3.0规范学习记录

    2024-05-14 10:54:06       33 阅读
  6. kafka3.0.0学习记录

    2024-05-14 10:54:06       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-14 10:54:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-14 10:54:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-14 10:54:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-14 10:54:06       18 阅读

热门阅读

  1. 牛客Linux高并发服务器开发学习第六天

    2024-05-14 10:54:06       12 阅读
  2. linux 个人用户设置默认shell为tcsh

    2024-05-14 10:54:06       9 阅读
  3. 【Pytest官方文档翻译及学习】2.1 如何调用pytest

    2024-05-14 10:54:06       12 阅读
  4. 交互之舞:Processing中的用户互动与响应设计

    2024-05-14 10:54:06       12 阅读
  5. MySQL创建存储过程函数

    2024-05-14 10:54:06       11 阅读
  6. 算法小记(二分)

    2024-05-14 10:54:06       11 阅读
  7. leetcode刷题

    2024-05-14 10:54:06       11 阅读
  8. 2024.5.14每日一题

    2024-05-14 10:54:06       11 阅读