0


扩展点都不知道不要说你用了Spring Boot

文章目录

前言

哈哈,本次有点标题党的嫌疑了,话又说回来,如果只停留在Spring Boot的基本的CRUD层面,未免也太过局限了,当需要去扩展一些功能,写一些组件的时候,就感觉无从下手了,所以本次,我们从一个标题党开始,了解一下Spring Boot 的扩展点,可以系统的了解记忆一下,此文不是八股文,希望大家能学以致用。

Spring Boot是一个基于Spring框架的快速开发框架,做java开发的同学基本上都使用过,它通过提供一系列的自动配置和快速开发的特性,帮助我们快速搭建和开发高效、可扩展的应用程序。然而,为了满足不同开发需求的多样性,Spring Boot也提供了丰富的扩展点,开发人员可以通过扩展点来实现自定义的应用程序功能和行为。本文将介绍Spring Boot的扩展点分类和特点,帮助大家更好地理解和应用Spring Boot的扩展点。无论您是初学者还是有一定经验的开发人员,本文都将为您提供一些有用的信息和思路,帮助您更好地使用Spring Boot。
在这里插入图片描述

冰点出品,必属精品


1.扩展点

根据Spring Boot官方文档,可以将Spring Boot的扩展点分为以下几类:
这里面的每一类都事

1.1. 应用程序生命周期扩展点

应用程序生命周期扩展点是指在Spring Boot应用程序的生命周期中,提供了一系列的扩展点,开发人员可以通过实现这些扩展点来对应用程序的生命周期进行控制和定制。这些扩展点主要包括以下几个:
在这里插入图片描述
此图来自网络

1.1.1 SpringApplicationRunListener

它是一个监听器接口,用于在Spring应用程序的运行生命周期中监听和响应相关事件。可以通过实现该接口来自定义应用程序的启动和关闭行为。

1.1.2 ApplicationEnvironmentPreparedEvent

该事件在应用程序启动前触发,用于在环境准备阶段执行一些操作,例如:加载配置文件、设置系统属性等。

1.1.3 ApplicationPreparedEvent

该事件在应用程序上下文创建完成后触发,用于在应用程序准备阶段执行一些操作,例如:创建和初始化Bean等。

1.1.4 ApplicationStartedEvent

该事件在应用程序启动完成后触发,用于在应用程序启动后执行一些操作,例如:向日志中输出启动信息等。

1.1.5 ApplicationReadyEvent

该事件在应用程序准备就绪后触发,用于在应用程序运行期间执行一些操作,例如:启动定时任务、初始化缓存等。

1.1.6 ApplicationFailedEvent

该事件在应用程序启动失败后触发,用于在应用程序启动失败时执行一些操作,例如:记录日志、发送告警等。


1.2. 容器扩展点

我们来先看一张图,大概了解一下。Spring Boot容器扩展点主要用于自定义Spring容器的创建和配置,提供了一种灵活的方式来增强和定制Spring容器的功能,进而实现应用程序的定制化需求。
在这里插入图片描述
此图来自网络

Spring Boot的容器扩展点主要用于自定义Spring容器的创建和配置,通过这些扩展点,开发人员可以对Spring容器进行更加细粒度的控制和定制,以满足特定的应用场景和需求。具体来说,容器扩展点的作用包括:

  1. 修改Bean的定义信息 BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor接口可以在Spring容器实例化Bean之前或之后修改Bean的定义信息,例如:修改Bean的属性值、增加或删除Bean的定义等。这些扩展点可以让开发人员在Bean实例化之前或之后对Bean的定义进行修改,以满足特定的需求。
  2. 修改Bean的属性值或执行其他操作 BeanPostProcessor接口可以在Spring容器实例化Bean后修改Bean的属性值或执行其他操作,例如:修改Bean的属性值、添加Bean的初始化方法等。这些扩展点可以让开发人员在Bean实例化后对Bean的属性值进行修改或执行其他操作,以满足特定的需求。
  3. 自定义Bean的创建、配置、解析等 通过实现BeanFactoryPostProcessor和BeanPostProcessor接口,开发人员可以自定义Bean的创建、配置和解析等过程,以满足特定的需求。例如,可以自定义BeanFactoryPostProcessor接口来修改Bean定义信息,自定义BeanPostProcessor接口来修改Bean的属性值或执行其他操作。

1.2.1 BeanFactoryPostProcessor

  • 用于在Spring容器实例化Bean之前修改Bean的定义信息。通过实现该接口,开发人员可以自定义Bean的配置和解析,例如:修改Bean的属性值、增加或删除Bean的定义等。这种方式可以在Spring容器实例化Bean之前对Bean的定义进行修改,从而实现更加灵活的配置和定制。

1.2.2 BeanPostProcessor

_ 用于在Spring容器实例化Bean后修改Bean的属性值或执行其他操作。通过实现该接口,开发人员可以自定义Bean的初始化逻辑,例如:修改Bean的属性值、添加Bean的初始化方法等。这种方式可以在Spring容器实例化Bean之后对Bean的属性值进行修改,从而实现更加灵活的初始化逻辑。_

1.2.3 BeanDefinitionRegistryPostProcessor

BeanDefinitionRegistryPostProcessor继承自BeanFactoryPostProcessor,用于在Spring容器实例化Bean定义之前修改Bean定义信息。通过实现该接口,开发人员可以自定义Bean的创建和解析逻辑,例如:修改Bean的属性值、增加或删除Bean的定义等。这种方式可以在Spring容器实例化Bean定义之前对Bean定义进行修改,从而实现更加灵活的配置和定制。


1.3. 自动配置扩展点

在这里插入图片描述

Spring Boot提供了多种自动配置扩展点,通过这些扩展点可以实现自动配置类的选择、条件筛选等功能。以下是几个常用的自动配置扩展点:

1.3.1 AutoConfigurationImportSelector

AutoConfigurationImportSelector是一个接口,用于实现自动配置类的选择逻辑。在Spring Boot应用程序启动时,会自动加载AutoConfigurationImportSelector接口的实现类,实现类会根据条件进行筛选,选择符合条件的自动配置类并加载。

1.3.2 EnableAutoConfiguration

EnableAutoConfiguration是一个注解,用于开启自动配置功能。在应用程序中添加该注解后,Spring Boot会自动加载符合条件的自动配置类,实现自动配置的功能。该注解可以通过exclude属性排除一些自动配置类,也可以通过excludeName属性排除一些自动配置类的名称。

1.3.3 ConditionalOnClass

ConditionalOnClass是一个注解,用于在类路径中存在指定的类时才会加载自动配置类或Bean。可以使用该注解来检查类的可用性,如果类存在,则加载自动配置类或Bean,否则跳过。

1.3.4 ConditionalOnBean

ConditionalOnBean是一个注解,用于在容器中存在指定的Bean时才会加载自动配置类或Bean。可以使用该注解来检查Bean的可用性,如果Bean存在,则加载自动配置类或Bean,否则跳过。

1.3.5 ConditionalOnMissingBean

ConditionalOnMissingBean是一个注解,用于在容器中不存在指定的Bean时才会加载自动配置类或Bean。可以使用该注解来检查Bean的可用性,如果Bean不存在,则加载自动配置类或Bean,否则跳过。

这些自动配置扩展点可以帮助开发人员实现自动配置类的选择、条件筛选等功能,从而实现更加灵活、可扩展的应用程序。通过使用这些扩展点,开发人员可以自定义自动配置的功能和条件,以满足特定的需求。


1.4. Web扩展点

Spring Boot提供了多种扩展点用于自定义Web应用程序的配置和行为。其中,以下四个扩展点用于处理Web请求和响应相关的操作:

1.4.1 WebMvcConfigurer

WebMvcConfigurer是一个接口,用于自定义Spring MVC的配置。通过实现该接口,可以添加拦截器、消息转换器等,以满足特定的需求。例如,可以添加拦截器来验证请求的安全性,或者添加消息转换器来支持自定义的数据格式。

1.4.2 HandlerInterceptor

HandlerInterceptor是一个接口,用于自定义拦截器。拦截器可以在请求处理前或处理后执行自定义的逻辑,例如:验证用户权限、记录请求日志等。通过实现该接口,可以实现自定义的拦截器,以满足特定的需求。

1.4.3 HandlerMethodArgumentResolver

HandlerMethodArgumentResolver是一个接口,用于自定义请求参数解析器。在处理请求时,Spring会将请求中的参数解析为对应的Java对象。通过实现该接口,可以自定义请求参数解析器,以支持自定义的参数类型或数据格式。

1.4.4 HandlerMethodReturnValueHandler

HandlerMethodReturnValueHandler是一个接口,用于自定义请求返回值处理器。在处理请求时,Spring会将Java对象转换为响应结果并返回给客户端。通过实现该接口,可以自定义请求返回值处理器,以支持自定义的数据格式或响应结果。

总之,这些扩展点可以帮助开发人员自定义Web应用程序的配置和行为,以满足特定的需求。通过实现这些扩展点,可以添加拦截器、消息转换器等,实现自定义的请求参数解析器和返回值处理器,从而实现更加灵活、可扩展的Web应用程序。


1.5. 数据库扩展点

Spring Boot提供了多种数据访问相关的扩展点,以下是几个常用的扩展点:

1.5.1 DataSource

DataSource是一个接口,用于定义数据源的配置信息。数据源是应用程序与数据库之间的连接池,通过数据源可以配置数据库驱动、连接池大小等属性,与数据库建立连接。

1.5.2 TransactionManager

TransactionManager是一个接口,用于定义事务管理器的配置信息。事务管理器用于管理应用程序中的事务,例如:事务隔离级别、超时时间等。通过实现TransactionManager接口,可以自定义事务管理器的配置信息,以满足特定的需求。

1.5.3 JdbcTemplate

JdbcTemplate是Spring提供的数据访问模板,用于简化JDBC操作。通过JdbcTemplate,可以更加方便地进行数据库操作,例如:执行SQL语句、执行存储过程等。JdbcTemplate封装了大量的JDBC操作,提供了更加简单、易用的API,可以大大提高开发效率。

1.5.4 JpaVendorAdapter

JpaVendorAdapter是一个接口,用于定义JPA厂商适配器的配置信息。JPA厂商适配器用于适配不同的JPA实现,例如:Hibernate、EclipseLink等。通过实现JpaVendorAdapter接口,可以自定义JPA厂商适配器的配置信息,例如:数据库方言、JPA实现等。


1.6. 安全扩展点

Spring Boot提供了多种安全相关的扩展点 我们基本上用的很少,大家只需要了解一下。后续我会从这个里面挑选两个,写个项目真实使用的示例,供大家参考。

安全扩展点可以帮助开发人员实现更加灵活、可扩展的安全功能,从而满足特定的需求。通过使用这些扩展点,可以自定义Spring Security的配置信息、Web应用程序的安全配置信息,以及自定义用户认证方式、用户信息获取方式等,以实现更加定制化的安全功能。

1.6.1 SecurityConfigurerAdapter

SecurityConfigurerAdapter是一个类,用于定义Spring Security的配置信息。通过继承该类,可以实现用户认证和授权、添加安全过滤器等功能。SecurityConfigurerAdapter提供了一系列的方法,用于配置Spring Security的不同方面,例如:配置用户认证、授权、添加过滤器等。

1.6.2 WebSecurityConfigurerAdapter

WebSecurityConfigurerAdapter是一个类,用于定义Web应用程序的安全配置信息。通过继承该类,可以实现定义安全规则、设置用户认证和授权等功能。WebSecurityConfigurerAdapter提供了一系列的方法,用于配置Web应用程序的安全性,例如:配置HTTP安全规则、配置表单登录、配置用户认证等。

1.6.3 AuthenticationProvider

AuthenticationProvider是一个接口,用于自定义用户认证方式。通过实现该接口,可以实现自定义的用户名和密码认证方式、OAuth2认证方式等。AuthenticationProvider提供了一系列的方法,用于实现用户认证的不同方面,例如:验证用户密码、获取用户权限等。

1.6.4 UserDetailsService

UserDetailsService是一个接口,用于自定义用户信息获取方式。通过实现该接口,可以从数据库或其他数据源中获取用户信息。UserDetailsService提供了一个方法,用于根据用户名获取用户信息,开发人员可以根据实际需求进行自定义实现。


1.7. 其他扩展点

下面这些扩展点不知道怎么归类,有点杂,我们暂且归类为其他扩展点吧,但是都是比较常用的一些扩展点。可以帮助开发人员实现更加灵活、可扩展的应用程序功能,从而满足特定的需求。通过使用这些扩展点,可以自定义命令行操作、命令行参数处理方式、嵌入式Servlet容器的配置信息、健康检查指标以及异常处理方式等,以实现更加定制化的应用程序功能。

1.7.1 CommandLineRunner

CommandLineRunner是一个接口,用于在Spring Boot应用程序启动后执行一些命令行操作。例如:初始化数据、启动定时任务等。通过实现CommandLineRunner接口,可以自定义需要执行的命令行操作。

1.7.2 ApplicationRunner

ApplicationRunner是一个接口,与CommandLineRunner类似,也用于在Spring Boot应用程序启动后执行一些命令行操作。但其提供了更灵活的参数处理方式,可以接收一个ApplicationArguments对象,从而更加方便地处理命令行参数。

1.7.3 CommandLinePropertySource

CommandLinePropertySource是一个接口,用于将命令行参数转换为Spring环境中的属性值。例如:将命令行参数–server.port=8080转换为spring.server.port=8080的属性值。通过实现CommandLinePropertySource接口,可以自定义命令行参数的处理方式,以满足特定的需求。

1.7.4 EmbeddedServletContainerCustomizer

EmbeddedServletContainerCustomizer是一个接口,用于自定义嵌入式Servlet容器的配置信息。例如:自定义端口号、设置SSL证书等。通过实现EmbeddedServletContainerCustomizer接口,可以实现嵌入式Servlet容器的自定义配置。

1.7.5 HealthIndicator

HealthIndicator是一个接口,用于定义应用程序的健康检查指标。例如:检查数据库连接是否正常、检查磁盘使用情况等。通过实现HealthIndicator接口,可以自定义应用程序的健康检查指标,以便及时发现和解决应用程序的问题。

1.7.6 ErrorController

ErrorController是一个接口,用于自定义应用程序的异常处理方式。例如:自定义404页面、重定向到错误页面等。通过实现ErrorController接口,可以自定义应用程序的异常处理方式,以提高用户的体验。

2. 参考文档

  1. Spring Boot官方文档:https://spring.io/projects/spring-boot
  2. Spring Boot Reference Guide:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
  3. Spring Boot官方文档相关 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-customizing-bean-definitions
  4. Spring Boot 自动配置 https://docs.spring.io/spring-boot/docs/3.1.2/reference/html/auto-configuration-classes.html#appendix.auto-configuration-classes

在这里插入图片描述

👏好了,本次的Spring Boot 的扩展点分享就到这儿,我是冰点,下次见。如果我的文章对你有所收获,可以给个赞。如果有疑问可以在评论区留言。
在这里插入图片描述

标签: spring boot java 后端

本文转载自: https://blog.csdn.net/wangshuai6707/article/details/131939193
版权归原作者 冰点. 所有, 如有侵权,请联系我们删除。

“扩展点都不知道不要说你用了Spring Boot”的评论:

还没有评论