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

news/2024/10/25 6:33:00/

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

相关文章

电视机类

“【问题描述】 补全设计一个TV类和一个Remote类。Remote类的成员函数是TV类的友元, 电视类有状态、频道和音量基本属性,默认初始频道为5,默认初始音量为20。状态有开和关(-1表示关机状态,其他为开机状态)。…

全球电视制式

什么是电视制式? 电视制式其实就是电视信号形成、传输及处理的方法,从而形成了具有独立完整的参数及功能系统的总体规定。电视广播传送到千家万户,在一个国家内一般所有的电视系统与设备必须按照同样的制式工作。媒体广播对一个guojia很重要…

打印不同商品价格(使用父类作为返回值实现打印不同类型商品价格)

//商品类Goods类 public abstract class Goods { //打印输出商品价格 public abstract void printPrice(); } //食品类Foods类 public class Foods extends Goods{ public void printPrice() { System.out.println("打印输出食品价格"); } } …

智能电视机安装App

每年的12月18日是世界电视机日,电视机诞生于1925年,最初是电子机械式电视机;到了1933年,诞生CRT电视,即黑白电视,它只有黑色或白色,看任何物品都是黑色或者白色。又过了20年,1953年彩…

TV04-2——电视机

/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 文件名称: TV04-2——电视机 * 作 者:孙红蕾 * 完成日期:2013 年 10 月 13 日 * 问题描述:编写一个Java应用程序,模拟家庭买一台电视&…

电视机当计算机屏幕,电视机能当显示器吗?电视机是更大更便宜 但真的做不了显示器...

【PConline 科普1分钟】作为编辑,我们其实一直都很注重网友在文章下方的留言。最近我在文章下方发现有网友留言类似“电视机又大,价格还便宜用电视机当电脑显示器更舒服”的说法。但是真的是这样么? 先说答案:电视机是不可能代替显…

android系统电视机排行榜,智能电视机排行榜前十名

智能电视机排行榜前十名 Top1:创维55M1 55英寸4K高清电视机智能网络wifi平板液晶屏家用彩电 65 创维智能网络wifi平板液晶屏家用彩电采用第二代色彩引擎,经过PQ升级、色阶消除、噪点消除的技术处理,让画面颜色更加精准靓丽,提升画面对比度&am…

大数据告诉你2019电视机品牌竞争力排行

摘要:通过透析电视机品牌竞争力排行,并以2019年一月、二月数据为例,深度分析中国电视机市场消费者市场需求,探寻电视机市场的创新突围之路。数据主要包含如下内容:品牌市场份额占比、热门品牌销额环比、屏幕尺寸销量占…