【Springboot系列】springboot扩展点大整理,赶紧收藏起来

news2024/11/17 6:49:51

系列文章:Spring Boot学习大纲,可以留言自己想了解的技术点

1、aware系列

在Spring Boot中,有一些可以实现的Aware接口,用于在应用程序中获取特定的上下文或对象。这些接口允许您的组件意识到它们所在的环境,并与之进行交互。以下是在Spring Boot中常见的Aware接口:

1.1.ApplicationContextAware

:通过实现该接口,您的组件可以获取ApplicationContext(应用程序上下文)对象的引用,从而访问应用程序上下文中的Bean以及其他特定的Spring功能。

1.2.BeanFactoryAware

:实现该接口,您的组件可以获取BeanFactory(Bean工厂)对象的引用。这允许您在运行时从Bean工厂中获取其他Bean。

1.3.EnvironmentAware

:通过实现该接口,您的组件可以获取Environment(环境)对象的引用,从而访问应用程序的配置属性和配置文件。

1.4.MessageSourceAware

:实现该接口,您的组件可以获取MessageSource(消息源)对象的引用,从而访问国际化消息。

1.5.ResourceLoaderAware

:通过实现该接口,您的组件可以获取ResourceLoader(资源加载器)对象的引用,从而加载外部资源文件。

1.6.ServletContextAware

:实现该接口,您的组件可以获取ServletContext(Servlet上下文)对象的引用,从而访问与Web应用程序相关的功能。

这些接口都属于Spring框架的一部分,可以通过在您的组件类中实现相应的接口并实现相应的方法来使用它们。这样,当您的组件在Spring容器中创建时,Spring会自动将适当的上下文或对象引用注入到您的组件中,以便您可以使用它们。

2、Bean的生命周期扩展接口

在Spring框架中,您可以使用以下接口来扩展Bean的生命周期:

2.1InitializingBean

:通过实现InitializingBean接口,您的Bean可以在初始化阶段执行自定义逻辑。该接口包含一个afterPropertiesSet()方法,您可以在此方法中定义初始化逻辑。

2.2 DisposableBean

:通过实现DisposableBean接口,您的Bean可以在销毁阶段执行自定义逻辑。该接口包含一个destroy()方法,您可以在此方法中定义销毁逻辑。

2.3 @PostConstruct

:使用@PostConstruct注解可以在Bean的初始化阶段指定一个方法。该方法将在依赖注入完成后立即执行。

2.4 @PreDestroy

:使用@PreDestroy注解可以在Bean销毁之前指定一个方法。该方法将在Bean销毁前执行。

2.5 BeanPostProcessor

:BeanPostProcessor接口定义了在容器实例化Bean之后和初始化之前,对Bean进行自定义处理的方法。通过实现该接口,您可以插入自定义逻辑来处理Bean。

2.6 BeanFactoryPostProcessor

:BeanFactoryPostProcessor接口允许在所有Bean定义加载到容器之后,但在Bean实例化之前对它们进行自定义处理。通过实现该接口,您可以修改或添加新的Bean定义。

2.7 BeanDefinitionRegistryPostProcessor

:这是BeanFactoryPostProcessor接口的扩展,允许在Bean定义注册过程中对Bean定义进行自定义处理。它提供了对Bean定义注册表的直接访问,可以添加、删除或修改Bean定义。

这些接口提供了不同层面的扩展点,可以让您在Bean的生命周期中插入自定义逻辑。您可以根据需要选择适合您的场景的接口来实现自定义的Bean生命周期行为。

3、内置变量

Spring Boot有一些内置变量可供在应用程序中使用。以下是其中一些常用的内置变量:

  • ${random.*}:生成随机值的变量,例如${random.int}生成一个随机整数。
  • ${server.*}:获取与服务器相关的属性,如${server.port}获取应用程序正在运行的端口。
  • ${spring.*}:获取Spring Boot配置的属性,如${spring.application.name}获取应用程序的名称。
  • ${local.*}:获取本地机器的相关属性,如${local.ip-address}获取本地IP地址。
  • ${application.*}:获取应用程序特定的属性,需要在配置文件中定义,如${application.custom-property}获取自定义属性。

除了以上内置变量,您还可以在应用程序中使用自定义的环境变量或在配置文件中定义的属性。

4、web扩展点

4.1 HandlerMethodArgumentResolver

:实现HandlerMethodArgumentResolver接口可以创建自定义的方法参数解析器。方法参数解析器用于将请求参数映射到控制器方法的参数上。

4.2 HandlerMethodReturnValueHandler

:实现HandlerMethodReturnValueHandler接口可以创建自定义的方法返回值处理器。方法返回值处理器用于将控制器方法的返回值转换为响应的内容。

4.3 CorsConfigurationSource

:通过实现CorsConfigurationSource接口,您可以自定义跨域资源共享(CORS)的配置。可以在该接口中设置允许的来源、方法和头部等。

4.4EmbeddedValueResolverAware

:通过实现EmbeddedValueResolverAware接口,您的组件可以获取EmbeddedValueResolver对象的引用,用于解析字符串中的占位符和表达式。

4.5 ViewResolver

:通过实现ViewResolver接口,您可以创建自定义的视图解析器。视图解析器用于将逻辑视图名称解析为实际的视图实现,例如JSP、Thymeleaf模板等。

5、应用生命周期扩展点

使用以下扩展点来扩展应用程序的生命周期:

5.1 SpringApplicationRunListener

:通过实现SpringApplicationRunListener接口,您可以在应用程序启动的不同阶段插入自定义逻辑。该接口定义了多个方法,例如在应用程序启动前、启动成功后、出现异常时等情况下执行的回调方法。

5.2 ApplicationRunner

和CommandLineRunner:这两个接口在前面已经提到过,它们允许您在应用程序启动后执行特定的逻辑。您可以实现其中一个或两者来定义需要在应用程序启动后立即执行的操作。

5.3 ContextRefreshedEvent

和ContextClosedEvent:这些是Spring框架中的事件类,您可以监听并在应用程序上下文刷新或关闭时执行相应的操作。通过实现ApplicationListener或ApplicationListener接口,并处理对应事件的回调方法,可以在应用程序生命周期的特定点添加自定义逻辑。

5.4 SmartLifecycle

:实现SmartLifecycle接口可以创建一个具有更精细控制的组件,它可以在应用程序启动时自动启动,并在关闭时自动停止。该接口定义了多个方法,例如控制启动顺序、判断是否要自动启动和停止等。

5.5 ShutdownHook

:Spring Boot应用程序在关闭时会注册一个JVM关闭钩子。您可以使用SpringApplication.addShutdownHook()方法注册自定义的关闭钩子,以执行一些清理或释放资源的操作。

通过使用这些扩展点,可以在应用程序的不同生命周期阶段插入自定义逻辑,例如应用程序启动前的准备、应用程序启动后的初始化、应用程序关闭时的清理等。这些扩展点提供了更大的灵活性,使您能够定制和控制应用程序的整个生命周期。



最后推荐一本书

 

借助ChatGPT与Python轻松实现办公自动化:Excel Home多位微软全球MVP专家打造,用大量实例介绍使用Python操作Excel、Word、PPT和日常办公中涉及的各种对象。让没有编程经验的普通办公人员也能驾驭Python,实现多个场景的办公自动化,提升工作效率!

当当链接:《Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作(上下册)》(Excel Home)【简介_书评_在线阅读】 - 当当图书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/592868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

和数集团元宇宙场景落地 催生新机遇

现代社会随着科技不断发展,人们对于虚拟现实的需求日益提高。随着互联网进入Web3.0时代,越来越多的人开始进入虚拟世界,探索虚拟现实的无限可能。 在这个充满未知的广阔世界中,和数集团旗下包括【神念无界源起山海】、【神宠岛】…

国内使用chatGPT插件

无需任何繁琐操作,只要你一打开edge浏览器就能使用chatGPT,还要什么自行车! 那么如何使用呢?其实操作是非常简单的! 步骤 第一步:下载edge浏览器 edge浏览器一般Windows10系统都自带了,没有的…

ChatGPT 提示的艺术 —— 如何编写清晰有效提示指南

ChatGPT 提示的作用 正如我们之前提到的那样,ChatGPT 对话中使用的提示的质量可以显著影响对话的成功。定义清晰的提示可以确保对话保持在正确的轨道上,并涵盖用户感兴趣的主题,从而产生更引人入胜和信息丰富的体验。 那么什么样的 ChatGPT…

计算机网络实验:认识Packet Tracer软件

目录 前言实验目的实验内容及要求相关知识点实验指导实验过程总结 前言 计算机网络是当今信息技术的重要组成部分,它涉及到多种硬件和软件的协同工作,以实现数据的传输和交换。为了更好地理解和掌握计算机网络的基本原理和技术,我们需要进行…

关于分数的二进制原反补码的求解

话不多说,上例子 求-53/64的原反补; 前奏:-53/64可以分解为符号位“-”和数字位53/64; 第一步:在计算机中,符号位用0表示“”用1表示“-” 第二步:求53/64的二进制数,过程如下图…

如何回馈 Elastic 社区

作者:Ully Sampaio 在 Elastic 社区中拥有前排座位最美妙的事情之一就是见证人们互相帮助。 从讨论和 Elastic Community Slack 工作区到 Elastic YouTube 官方频道,无论你走到哪里,你都会看到 Elasticsearch 专家和初学者分享他们的知识。 这…

图解LeetCode——543. 二叉树的直径

一、题目 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 二、示例 2.1> 示例 1: 【输入】roo…

Vision Transformer (ViT)及各种变体

目录 0.Vision Transformer介绍 1.ViT 模型架构 1.1 Linear Projection of Flattened Patches 1.2 Transformer Encoder 1.3 MLP Head 1.4 ViT架构图 1.5 model scaling 2.Hybrid ViT 4.其他Vision Transformer变体 5.Vit代码 6.参考博文 0.Vision Transformer介绍 …

样本不平衡的解决办法

背景 Focal loss是最初由何恺明提出的,最初用于图像领域解决数据不平衡造成的模型性能问题。本文试图从交叉熵损失函数出发,分析数据不平衡问题,focal loss与交叉熵损失函数的对比,给出focal loss有效性的解释。 交叉熵损失函数…

危机先知:TOOM舆情监控助力风险预警

随着社交媒体和互联网的普及,公众的声音在网络上如洪水般涌现。这些声音传递着情绪、态度和观点,对个人、组织甚至整个社会产生着巨大影响。因此,舆情监控成为了一个不可或缺的工具,帮助企业和组织及时了解公众对其品牌、产品或服…

决策树基本理论知识

目录 1、决策树是一种树模型 2、决策树的训练与测试 3、信息增益(ID3) 3.1、衡量标准-熵 3.2、决策树构造实例 4、决策树算法 ​5、连续值离散化 6、预剪枝 1、决策树是一种树模型: (1)、从根结点开始一步步走…

【C++】哈希表封装unordered系列

文章目录 前言一、哈希表的封装总结 前言 在看本篇文章前大家尽量拿出上一篇文章的代码跟着一步步实现,否则很容易引出大量模板错误而无法解决。 一、哈希表的封装 首先我们要解决映射的问题,我们目前的代码只能映射整形,那么如何支撑浮点数…

Java使用zxing.jar生成二维码

由于时代科学的进步,二维码已经和我们的生活密不可分,在开发过程中往往会涉及到和二维码相关的开发,今天这篇文章就教会大家如何使用zxing.jar包生成二维码 下面这个就是百度上面自带的一个生成二维码的功能,那他是怎么实现这个功…

计算机组成原理与体系结构概述

目录 一、计算机的发展 二、计算机的硬件系统 三、硬件的工作原理 四、计算机系统的层次结构 五、计算机的性能指标 一、计算机的发展 第一代计算机:电子管计算机 第一台电子计算机:ENIAC(1946) 设计目的:计算导弹…

平板触控笔哪种好?主动式电容笔推荐

现在市面上的电容笔分为主动式和被动式电容笔,很多小伙伴都分不清主动式和被动式电容笔的区别。今天给大家介绍一下这两款电容笔的区别。给大家分享几款好用的平替电容笔。 一、主动式电容笔和被动式电容笔的区别: 1.主动式电容笔: 主动式电…

数据结构与算法(九)

红黑树复习 图 图,是一种数据结构 集合只有同属于一个集合;线性结构存在一对一的关系,树形结构一对多的关系,图形结构,多对多的关系。 微信中:许多的用户组成了一个多对多的朋友关系网,这个关…

【C语言】变量

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星T…

【机器学习】分类问题和逻辑(Logistic)回归算法详解

在阅读本文前,请确保你已经掌握代价函数、假设函数等常用机器学习术语,最好已经学习线性回归算法,前情提要可参考https://blog.csdn.net/weixin_45434953/article/details/130593910 分类问题是十分广泛的一个问题,其代表问题是&…

Android studio 环境安装

1. Java JDK安装 https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe 下载jdk-17 并安装 安装完成后设置环境变量 #新增环境变量JAVA_HOME C:\Program Files\Java\jdk-17#Path 环境变量添加 %JAVA_HOME%\bin %JAVA_HOME%\jdk\bin#新增环境变量CLASSPAT…

HEVC量化编码介绍

介绍 ● 视频编码中,残差信号经过DCT,变换系数具有较大动态范围,因此对变换系数量化可以有效减小信号取值空间,获得更好的压缩效果; ● 多对一映射机制,所以不可避免的引入失真,这是视频编码中…