做海报的素材网站/网络营销软文范例500字
文章目录
- 引言
- 扩展点讲述
- 花式扩展之自动配置类
- 花式扩展之实现接口
- 实现方式
- 样例
- 花式扩展之自定义starter
- Import方式
- SpringFactories方式
- 总结
- 鸣谢
引言
Spring Boot是一个高度可定制的框架,旨在帮助开发者快速创建、配置和管理他们的应用程序
扩展点讲述
Spring Boot的扩展点主要在于它允许开发者自定义和扩展其功能。例如,你可以通过创建自定义的自动配置类
来覆盖或添加新的自动配置;或者通过实现
Spring Boot的ApplicationContextAware或CommandLineRunner等接口
来添加自定义的应用程序逻辑;此外,你还可以通过创建自定义的starter
来封装和提供特定的依赖项集合。下面我将为大家介绍这三类自定义扩展的基本实现思路或案例
花式扩展之自动配置类
- 创建一个配置类,并在类上添加
@Configuration
注解。 - 在该配置类中创建需要注册的 Bean,并使用
@Bean
注解标注该方法。 - 如果需要配置属性,可以创建一个配置属性类,并在类上添加
@ConfigurationProperties
注解。该注解的prefix
属性指定了配置属性的前缀。 - 在配置类中使用
@EnableConfigurationProperties
注解来启用该配置属性类。 - 如果需要条件化地注册 Bean,可以使用
@Conditional
注解来指定一个条件。 - 如果需要指定一个 Bean 只在一个特定的 profile 处于激活状态时才会被注册,可以在 Bean 的定义方法上添加
@Profile
注解,并指定需要激活的 profile。 - 如果需要自动装配 Bean 依赖,可以在属性或 setter 方法上添加
@Autowired
注解。 - 如果需要注入具有指定名称的 Bean,可以在属性上添加
@Resource
注解,并指定需要注入的 Bean 的名称。
花式扩展之实现接口
实现方式
- ApplicationContextInitializer:用于自定义应用程序上下文的初始化过程。
- SpringBootApplicationProcessor:用于自定义Spring Boot应用程序的配置。通过实现该接口并使用自定义逻辑,您可以修改Spring Boot应用程序的配置类。
- EnvironmentPostProcessor:用于自定义Spring环境的初始化和配置过程。通过实现该接口,您可以定义一个类,该类将在Spring环境创建之前或创建过程中被调用,允许您对环境变量的设置、配置文件的加载等进行自定义或修改。
- ResourceLoaderAware:提供对ResourceLoader的引用,让Bean可以访问到资源加载器
- ApplicationContextAware:提供ApplicationContext的引用,让Bean可以访问到应用程序上下文。
- ApplicationArguments:用于获取应用程序的命令行参数
- BeanNameGenerator:自定义Bean的名称生成策略。
- BeanDefinitionRegistryPostProcessor:允许在BeanDefinitionRegistry中注册所有的Bean之前执行一些自定义处理。
- BeanPostProcessor:允许在Bean的生命周期中进行一些自定义处理,比如自动装配和后处理。
- BeanFactoryPostProcessor:允许在BeanFactory初始化之前执行一些自定义处理,比如改变Bean的定义或替换其他Bean。
- EnvironmentAware:提供对SpringEnvironment的引用,让Bean可以访问到应用程序的环境信息。
- Initializer:用于在Bean的生命周期开始时执行一些自定义操作。
- ApplicationListener:监听ApplicationEvent的发布,用于响应应用程序级别的事件。
- MessageSourceAware:提供对MessageSource的引用,让Bean可以访问到国际化消息。
- BeanFactoryAware:提供对BeanFactory的引用,让Bean可以访问到Bean工厂。
- ApplicationContextAware:提供对ApplicationContext的引用,让Bean可以访问到应用程序上下文。
- ServletContextAware:提供对ServletContext的引用,让Bean可以访问到Web应用程序的上下文。
- BeanDestroyedHandler:在Bean的生命周期结束时执行一些自定义操作。
- Lifecycle:定义了Bean的生命周期接口,允许开发者在关键的生命周期方法(如初始化、销毁等)上执行一些自定义操作。
- CustomEditorConfigurer:允许定义自定义属性编辑器,用于将属性类型转换为适合的编辑器。
- ResourcePatternResolver:用于解析资源路径,以便找到指定的资源。
- BeanDefinitionReader:用于读取Bean定义信息,包括XML和Java配置类等。
- BeanDefinitionRegistry:用于管理Bean定义的注册和解析。
- BeanDefinitionDecoder:用于解码Bean定义信息,将其转换为可操作的Bean对象。
- BeanDefinitionDocumentReader:用于读取XML配置文件中的Bean定义信息。
- BeanDefinitionParser:用于解析特定类型的配置文件(如XML或Java类)。
- BeanDefinitionHolder:包含Bean定义和其相关的名称、别名等信息。
- BeanDefinitionVisitor:用于访问和操作Bean定义信息。
- BeanDefinitionReaderListener:监听Bean定义读取事件,用于在读取过程中执行一些自定义操作。
- BeanDefinitionRegistryListener:监听Bean定义注册事件,用于在注册过程中执行一些自定义操作。
- BeanDefinitionParserDelegate:提供了一些辅助方法来帮助解析和校验Bean定义信息。
- BeanDefinitionValidationVisitor:用于校验Bean定义的合法性。
- BeanNameGeneratorHolder:包含一个BeanNameGenerator和一个BeanNameGeneratorDelegate。
- BeanFactoryInitializerAdapter:允许通过BeanFactory实现BeanFactoryInitializr接口的功能。
- LifeCycleProcessor:用于在Bean的生命周期中执行自定义操作,比如在Bean的生命周期事件发生时执行特定的逻辑。
- CommandLineRunner:用于在应用程序启动后执行自定义的命令行逻辑。通过实现该接口,您可以定义一个类,在该类的run方法中编写自定义逻辑,以便在应用程序启动后执行特定的操作。
- ApplicationRunner:与CommandLineRunner类似,用于在应用程序启动后执行自定义逻辑。与CommandLineRunner不同的是,ApplicationRunner更适用于复杂的命令行参数处理和输出结果的处理。
- WebMvcConfigurer:用于自定义Spring MVC的配置。通过实现该接口并重写addConventions方法,您可以自定义Spring MVC的约定,比如自定义控制器路径、异常处理等。
- AsyncConfigurer:用于自定义异步方法的配置。通过实现该接口并重写getAsyncExecutor方法,您可以自定义异步执行的线程池配置,比如线程池大小、线程池类型等。
样例
@SpringBootApplication
@Slf4j
public class J4nJspApplication implements ApplicationContextAware , BeanNameGenerator , BeanDefinitionRegistryPostProcessor, BeanPostProcessor, BeanFactoryPostProcessor
, EnvironmentAware, CommandLineRunner {public static void main(String[] args) {SpringApplication.run(J4nJspApplication.class, args);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {log.info("获取上下文进行操作");}@Overridepublic String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {log.info("我可以改变bean的名称");return null;}@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {log.info("我可以获取容器并修改bean或添加bean");}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {log.info("提供了bean definition的解析和注册功能,可以解析配置文件中定义的Bean只是我的功能之一而已");}@Overridepublic void setEnvironment(Environment environment) {log.info("环境变量{}", JSONUtil.toJsonStr(environment));}@Overridepublic void run(String... args) throws Exception {log.info("我可以在项目启动后执行一些操作");}
}
花式扩展之自定义starter
Import方式
- @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import
(AutoConfigurationxxxx.class
)
public@interface EnableAutoConfiguration
{} AutoConfigurationxxxx
implementsBeanFactoryAware, EnvironmentAware, Ordered ...
- 启动类标记
@EnableAutoConfiguration
SpringFactories方式
- 新建文件
resources/META-INFO/spring.factories
- 文件配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=你的配置类包路径.配置类,xxx,xxx,xxx
,多个配置类逗号分隔
总结
- 自动配置:Spring 的自动配置功能可以帮助开发者快速搭建应用程序框架,但是有时候默认的配置可能不能满足实际需求。通过自定义扩展,开发者可以提供自己的自动配置代码,覆盖默认配置,以满足特定的应用需求。
- 实现接口:Spring 提供了许多接口和抽象类,开发者可以通过实现这些接口来自定义扩展功能。通过实现接口,开发者可以定制自己的业务逻辑,增强 Spring 功能,提高应用程序的灵活性和可维护性。
- starters:Spring Boot 的 starters是 Spring 提供的一种快速启动项目的方式,它提供了一些常用的依赖库,使得开发者在启动项目时不需要手动添加这些依赖。通过自定义扩展,开发者可以添加自己的 starters,提供更多的功能和库支持,使得其他开发者能够更方便地使用自己的项目。
鸣谢
- 非常感谢你从头到尾阅读了这篇文章,希望其中的内容对你有所启发和帮助。如果你还有其他问题或需要进一步的了解,欢迎随时关注我的动态并留言
- 最后可以给作者点个关注和小赞赞嘛,谢谢!
- 觉得有收藏价值可以进行收藏
相关文章:

论Spring或Spring Boot的花式扩展
文章目录 引言扩展点讲述花式扩展之自动配置类花式扩展之实现接口实现方式样例 花式扩展之自定义starterImport方式SpringFactories方式 总结鸣谢 引言 Spring Boot是一个高度可定制的框架,旨在帮助开发者快速创建、配置和管理他们的应用程序 扩展点讲述 Spring Bo…...

如何评估分类模型的好坏
如何评估分类模型的好坏 评估分类预测模型的质量,常用一个矩阵、三条曲线和六个指标。 一个矩阵:混淆矩阵;三条曲线:ROC曲线、PR曲线、KS曲线;六个指标:正确率Acc、查全率R、查准率P、F值、AUC、BEP值、KS…...

● 84.柱状图中最大的矩形
84.柱状图中最大的矩形 class Solution { public:int largestRectangleArea(vector<int>& heights) {stack<int>st;heights.insert(heights.begin(),0);heights.push_back(0);st.push(0);int res0;for(int i1;i<heights.size();i){while(heights[i]<heig…...

未检查的转换: ‘java.lang.Object‘ 转换为 ‘java.util.List
fastjson方式 Object object ... // 获取待转换的objectList<WbsCategory> list JSON.parseObject(JSON.toJSONString(object), new TypeReference<List<WbsCategory>>() {}); 在这个示例中,我们使用JSON.toJSONString()将object对象转换…...

【C语言】使用C语言,实现九九乘法表(另附Python、Java、JavaScript实现方式)
文章目录 1. C语言实现1.1 思路1.2 代码实现 3.其他语言实现3.1 Python实现3.2 Java实现3.3 JavaScript实现 1. C语言实现 1.1 思路 九九乘法表图示: 思路如下:定义两层for循环即可实现九九乘法表 一共有9层,所以要定义一个变量iÿ…...

[机缘参悟-102] :IT人 - 管理的本质?管理人与从事技术的本质区别?人性、冰山模型、需求层次模型
感悟: 管理的本质是:学习各种管理理论、方法、技能,克服自身的人性缺点、预防他人人性的恶点、利用他人的人性特点拿到结果,从而完成组织、管理者的上司、管理者自身、管理者下属的目标。管理中的问题,80%以上都人性问…...

[论文阅读笔记26]Tracking Everything Everywhere All at Once
论文地址: 论文 代码地址: 代码 这是一篇效果极好的像素级跟踪的文章, 发表在ICCV2023, 可以非常好的应对遮挡等情形, 其根本的方法在于将2D点投影到一个伪3D(quasi-3D)空间, 然后再映射回去, 就可以在其他帧中得到稳定跟踪. 这篇文章的方法不是很好理解, 代码也刚开源, 做一…...

【Java 动态数据统计图】前后端对接数据格式(Map返回数组格式数据)六(120)
说明: 前端使用:vue3.0 前后端对接数据格式:无非就是前端把后端返回的数据处理为自己想要的格式,或者,后端给前端处理好想要的格式; 针对前后端的柱状图,趋势图等数据对接,前端一般需…...

❤ 给自己的mac系统上安装java环境
❤ 给自己的mac系统上安装java环境 🍓 作为前端工程师如何给自己的mac系统上安装java环境 🍎 最近因为自己的一些项目需求,mac电脑上需要安装一些后台的java环境,用来跑后台的java程序,于是从一个前端工程师的角度安…...

Java-匿名类
介绍 匿名类是指没有名字的类,它对一个给定的类进行拓展,或者实现一个给定的接口。使用匿名类可以使得代码更加简洁、紧凑、模块程度更高。 实现方式及语法 匿名类有两种实现方式 继承一个类,重写其方法实现一个接口(可以是多…...

Maven的超级POM
对于我们创建的一个maven工程,即便我们自己的pom.xm文件中没有明确指定一个父工程(父POM),其实也默认继承了超级POM,就好比JAVA类继承Object类一样。 maven官网关于超级POM的介绍: https://maven.apache.o…...

软考高级系统架构设计师系列论文九十二:论新技术的引进
软考高级系统架构设计师系列论文九十二:论新技术的引进 一、摘要二、正文三、总结一、摘要 根据国家税务总局对税务系统内所有系统进行集成与整合的需求,我所在的开发单位组织了全国金税工程防伪税控系统网络版的升级开发工作。该项目工程浩大,要求在具有严格的安全、可靠性…...

vue使用Bootstrap的详细方法
要在Vue中使用Bootstrap,您可以按照以下步骤进行操作: 安装Bootstrap:首先,您需要安装Bootstrap。您可以使用npm或者yarn来安装Bootstrap。打开终端,并在项目的根目录中运行以下命令: npm install bootst…...

leetcode做题笔记103. 二叉树的锯齿形层序遍历
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 思路一:BFS #define N 2000int** zigzagLevelOrder(st…...

如果将PC电脑变成web服务器:利用Nignx反向代理绕过运营商对80端口封锁
如果将PC电脑变成web服务器:利用Nignx反向代理绕过运营商对80端口封锁 在上一篇文章中,我们已经实现了内网主机的多次端口映射,将内网主机的端口映射到了公网,可以通过公网访问该主机了。 因为电信的家庭宽带,默认是…...

Eureka:服务注册-信息配置-自我保护机制
首先在提供者服务下,添加一个依赖 <!-- Eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version><…...

C++二叉树进阶
本期内容我们讲解二叉树的进阶知识,没有看过之前内容的小伙伴建议先看往期内容 二叉树-----补充_KLZUQ的博客-CSDN博客 目录 二叉搜索树 代码实现 基础框架 Insert Find Erase 析构函数 拷贝构造 赋值 二叉搜索树的应用 全部代码 二叉搜索树 二叉搜索树…...

layui tree组件取消勾选
layui(2.8.15) tree的api中,只有 tree.setChecked(id, idArr) 方法,没有取消勾选的方法。 我的需求是:勾选后做判断,如果不符合条件则取消勾选。 实现方法: 使用 tree的oncheck事件,在回调函数中做判断&…...

【Android基础面试题】ViewPager与ViewPager2的区别
ViewPager和ViewPager2是Android中用于实现滑动页面切换的控件。它们的主要区别如下: 实现方式 ViewPager2的内部实现是RecyclerView,而ViewPager是通过继承自ViewGroup实现的。因此,ViewPager2的性能更高。 滑动方向 ViewPager2可以实现横向…...

springCloudGateway网关配置
1.配置跨域支持 /*** 跨域支持*/ Configuration public class CorsConfig {Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedH…...

kali 2023.3新增工具
在终端模拟器中运行 sudo apt update && sudo apt full-upgrade 命令来更新其安装 Kali Linux 2023.3 发布中包含了九个新工具,分别是: Calico:云原生网络和网络安全。 cri-tools:用于Kubelet容器运行时接口的命令行界面…...

W25Q64 驱动--基于SPI2接口
前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…...

禁用无线键盘指定按键
文章目录 前言主体 前言 睡一觉把键盘压坏了一个按键,一开机键盘就自动打出这个字母,我在想用其他按键平替这个字母即可,使用软件修改内部的映射,那么使用autoHotkey软件是十分容易做到的 主体 letter_replace.ahk 创建一个如此命名的文件,然后输入命令即可 a::b 代表平替 a…...

分数规划(二分)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 小咪是一个土豪手办狂魔,这次他去了一家店,发现了好多好多(n个)手办,但他是一个很怪的人,每次只想买k个手办&a…...

Vue2向Vue3过度Vue3状态管理工具Pinia
目录 1. 什么是Pinia2. 手动添加Pinia到Vue项目3. Pinia基础使用4. getters实现5. action异步实现6. storeToRefs工具函数7. Pinia的调试8. Pinia持久化插件 1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 ,是 Vuex 状态管理工具的替代品 2. 手动添加Pinia到…...

STM32--SPI通信与W25Q64(1)
文章目录 前言SPI通信硬件电路移位过程 SPI时序起始与终止条件交换一个字节 W25Q64硬件电路框图 FLASH操作注意事项软件SPI读写W25Q64 前言 USART串口链接入口 I2C通信链接入口 SPI通信 SPI(Serial Peripheral Interface)是一种高速的、全双工、同步的串…...

版本控制工具Git常见用法
Git 是一个非常强大和灵活的版本控制工具,提供了许多命令和功能来管理代码的版本、分支、合并等。以下是一些 Git 的详细用法: 配置相关命令: 设置用户名和邮箱: git config --global user.name "Your Name" git conf…...

Multisim软件安装包分享(附安装教程)
目录 一、软件简介 二、软件下载 一、软件简介 Multisim软件是一款电路仿真和设计软件,由美国国家仪器公司(National Instruments)开发。它提供了一个交互式的图形界面,使用户能够轻松地构建和仿真电路。以下是Multisim软件的详…...

【android12-linux-5.1】【ST芯片】HAL移植后开机卡死
按照ST的官方readme移植HAL后开机一直卡在android界面,看logcat提示写文件时errorcode:-13。查下资料大致明白13错误码是权限不足,浏览代码在写文件的接口加日志后,发现是需要写iio:device*/buffer/enable这类文件的时候报错的。千…...

线程池也就那么一回事嘛!
线程池详讲 一、线程池的概述二、线程池三、自定义线程池四、线程池工作流程图五、线程池应用场景 一、线程池的概述 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过…...