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

🤵‍♂️ 个人主页:@香菜的个人主页

✍🏻作者简介:csdn 认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主,2021年度csdn博客之星十四名
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+

系列文章: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.rhkb.cn/news/13824.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub Copilot Labs 体验「收手吧,外面全是 ChatGPT」

本文正在参加 ✍🏻 技术视角深入 ChatGPT 征文活动 相信大家或多或少都体验过了 ChatGPT,或者更进一步,在 IDE 中也装上了对应的插件 不过真正在 coding 中用上的频率有多高呢?可能大多数人都只是尝个鲜然后就忘了,至…

最新ChatGPT GPT-4 NLU实战之文档问答类ChatPDF功能(附ipynb与python源码及视频)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(五)

目录 前言最新ChatGPT GPT-4 自然语言理解NLU实战之文档问答类ChatPDF功能引言ChatGPT 接口Qdrant数据库Embedding存储核心代码测试 其它NLU应用及实战相关文献 参考资料其它资料下载 前言 最近,研究人员开始探索使用ChatGPT来进行文档问答(QA&#xff…

最新ChatGPT GPT-4 自然语言理解NLU与句词分类技术详解(附ipynb与python源码及视频讲解)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(四)

目录 前言最新ChatGPT GPT-4 自然语言理解NLU与句词分类技术详解1. NLU基础1.1 句子级别的分类1.2 Token级别的分类 2. 相关API2.1 LMAS GPT API2.2 ChatGPT Style 相关NLU应用及实战相关文献 参考资料其它资料下载 前言 自然语言理解(NLU)是人工智能&a…

新手小白利用chatgpt解决kali网络配置问题

在启动卡kali的时候发现没有网络 通过ifconfig -a发现没有获取到ip 经过一番查询,尝试用dhclient eth0去手动获取ip,发现成功了 但是每次重启kali都要手动获取一遍ip太麻烦,想着问题还是出在配置文件这里,无奈于小白不懂原理&…

chatgpt赋能python:Python怎么取消tab

Python怎么取消tab 在Python编程中,Tab键是一种重要的缩进方式,但在某些情况下,可能会遇到需要取消Tab缩进的情况。因此,了解如何取消Tab缩进是Python编程中的必经之路。本文将介绍Python的Tab缩进机制以及如何取消Tab缩进的方式…

为什么ClassPathResource可以读取到流?- 第465篇

历史文章(文章累计460) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 S…

javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配

lastIndexOf匹配和正则表达式匹配 项目需求1.规范的字符串2.不规范的字符串3-1.万能封装3-2.ChatGPT的优化写法4.正则表达式的用法5.补充知识:lastIndexOf的用法 项目需求 javascript中截取字符串中最后一个“/”和“?”之间的内容。 1.规范的字符串 https://tes…

chatgpt赋能Python-python_quine

Python Quine: 在Python编程中理解自我复制的魅力 如果您已经开始了编程学习之旅,您就可能听说过Quine。Quine是一种程序,它可以输出自己的源代码,并被称为自我复制程序。这种程序很少出现在编程实践中,但在计算机科学中却发挥着…

chatgpt赋能python:Python分隔符怎么用?

Python分隔符怎么用? 在Python编程中,分隔符是一个非常重要的概念。它可以帮助我们在代码中分隔不同的元素,从而让代码更加易读和易于管理。在本文中,我们将深入探讨Python中分隔符的使用方法。 什么是分隔符? 在Py…

chatgpt赋能Python-python3_8怎么换行

Python是一种高级编程语言,其易用性和简洁语法深受程序员的喜爱。而在Python中,换行是一项必不可少的操作。今天,我们将介绍如何在Python3.8中进行换行,并提供一些有用的技巧。 Python3.8中的换行操作 在Python中,我…

chatgpt赋能python:Python中符号详解

Python中符号详解 Python是一种高级编程语言,使用简洁、优雅的语法非常受欢迎。在Python中,有很多符号,这些符号对于写出优雅、高效的代码至关重要。在本文中,我们将详细介绍Python中的常见符号。 1. 等号(&#xff…

《Java黑皮书基础篇第10版》 第10章【习题】

Java语言程序设计 习题第十章 10.2章节习题 10.1 如果重新定义程序清单102中的Loan类,去掉其中的设置方法,这个类是不可改变的吗? 这个类依然是可以改变的,因为每一笔贷款作为一个对象,都是可以改变的 10.3章节习题 10.2 程序…

【人工智能与机器学习】——线性回归、逻辑回归与分类评价指标(学习笔记)

📖 前言:线性回归(Lincar Regression)模型是最简单的线性模型之一,简而言之就像一元一次函数,是所有机器学习初学者的起点。而逻辑回归(Logistic Regression)则稍显复杂,…

阿里巴巴正在为投资者投下一颗“重磅炸弹”

来源:猛兽财经 作者:猛兽财经 在本文中,猛兽财经将围绕:马云在这个时候回国的意义、阿里巴巴拆分为六大业务集团、为什么张勇将阿里巴巴拆分为六大集团对投资者有利、拆分后阿里巴巴各个集团业务的估值分析、阿里巴巴的财务业绩、…

iOS 摸鱼周报 #82 | 去中心化社交软件 Damus

本期概要 本期话题:设计开发加速器线下活动:女性开发者社区日;本周学习:Python 如何调用 Swift 程序内容推荐:涵盖现代 SwiftUI 编程探讨、可变视图、NSTimer、Swift Charts 等方面的内容摸一下鱼:去中心化…

这才是Excel未来的样子,口喊求和什么的弱爆了

Alex 发自 凹非寺量子位 | 公众号 QbitAI 不知各位是否有过被Excel支配的恐惧? 试想一下表格中密密麻麻的数据、让人云里雾里的工具菜单,还有一堆记不清楚的公式…… 现在,有位大聪明为了简化操作,搞出了一个为Excel而生的AI助手。…

中产,疯狂搞“香港身份”

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 风水轮流转,今朝到香港。去年K哥身边有几个朋友去了新加坡,今年才刚到四月份,就又有朋友开始在想办法搞香港身份了。这些人都是妥妥的中产,年龄在四五十…

聚观早报 | 首个国产新冠药停产;阿里巴巴创始人马云已回国内

今日要闻:首个国产新冠药停产;阿里巴巴创始人马云已回国内;家乐福中国内地首店关闭;好丽友漏税22万被罚12万;苹果iOS 16.4正式版来了 首个国产新冠药停产 腾盛博药的首款商业化产品,新冠中和抗体药物“安巴…

万字长文:一文看懂GPT风口,有哪些创业机会?

“故事发生在未来,2040年通用人工智能系统已经接管了城市的管理。其中一个AI系统的管理者因为妻子的背叛,修改AI系统的一个底层参数——让AI对人类的谎言、背叛怀有深深的厌恶。之后AI在每天对社交平台的监控中看到了无数谎言、背叛,报复的动…

硅谷新王登国会山,呼吁加强 AI 监管;马斯克任命推特新 CEO;数字媒体巨头申请破产;欧盟通过全球首个全面监管加密资产框架 | 经济学人第 21 周

1. 硅谷新王登国会山,呼吁加强 AI 监管 Sam Altman, the chief executive of OpenAI, the firm behind the ChatGPT chatbot, called for tighter regulation of rapidly developing generative artificial intelligence, such as by forcing disclosure on images …