《学会 SpringBoot 系列 · spring.factories 详解》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • spring.factories 示例
    • Spring Boot 3.x 的变动
    • 是否需要 @Configuration
    • 总结陈词

CSDN.gif

写在前面的话

spring.factories 文件是 Spring Boot 项目中的一个重要配置文件,用于定义自动配置、环境后处理器和其他 Spring Boot 组件的实现。这个文件通常位于 META-INF 目录下,Spring Boot 在启动时会读取这个文件,以便加载相应的配置和功能。
此篇博文分享一下 spring.factories 的相关用法。

推荐文章 - 程序猿入职必会:
《程序猿入职必会(1) · 搭建拥有数据交互的 SpringBoot 》
《程序猿入职必会(2) · 搭建具备前端展示效果的 Vue》
《程序猿入职必会(3) · SpringBoot 各层功能完善 》
《程序猿入职必会(4) · Vue 完成 CURD 案例 》
《程序猿入职必会(5) · CURD 页面细节规范 》
《程序猿入职必会(6) · 返回结果统一封装》
《程序猿入职必会(7) · 前端请求工具封装》
《程序猿入职必会(8) · 整合 Knife4j 接口文档》
《程序猿入职必会(9) · 用代码生成器快速开发》
《程序猿入职必会(10) · 整合 Redis(基础篇)》
《程序猿入职必会(11) · 整合 Redis 实战运用》

推荐文章 - 学会 SpringMVC 系列
《学会 SpringMVC 系列 · 基础篇》
《学会 SpringMVC 系列 · 剖析篇(上)》
《学会 SpringMVC 系列 · 剖析入参处理》
《学会 SpringMVC 系列 · 剖析出参处理》
《学会 SpringMVC 系列 · 返回值处理器》
《学会 SpringMVC 系列 · 消息转换器 MessageConverters》
《学会 SpringMVC 系列 · 写入拦截器 ResponseBodyAdvice》
《学会 SpringMVC 系列 · 剖析初始化》
《学会 SpringMVC 系列 · 参数解析器 ArgumentResolvers》


spring.factories 示例

先上一段示例,如下所示:

# EnableAutoConfiguration 允许注册自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.lw.sbex.ExternalConfig# EnvironmentPostProcessor 允许你在应用程序上下文创建之前修改环境。
org.springframework.boot.env.EnvironmentPostProcessor=\com.lw.sbdemo2.common.custom.CustomEnvironmentPostProcessor# SpringApplicationRunListener 允许你在应用程序的不同生命周期阶段进行操作。
org.springframework.boot.SpringApplicationRunListener=\com.lw.sbdemo2.common.start.CustomSpringApplicationRunListener

解析一下这个文件内容:

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration
    这一行定义了自动配置类,Spring Boot 的自动配置功能可以根据类路径中的库和配置自动配置 Spring 应用程序。
  2. org.springframework.boot.env.EnvironmentPostProcessor
    这一行定义了环境后处理器。环境后处理器允许开发者在 Spring 应用程序的环境准备阶段对环境进行修改。
public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor {@Overridepublic void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {// 在这里可以添加自定义的环境变量environment.getSystemProperties().put("custom.property", "customValue");System.out.println("Custom property added to environment: custom.property=customValue");}
}
  1. org.springframework.boot.SpringApplicationRunListener
    这一行定义了 Spring 应用程序运行监听器。运行监听器可以在 Spring 应用程序的生命周期中执行特定的操作。
    com.zoe.onelink.business.init.BizDefaultLoggingLevelApplicationRunner:这个类可能用于设置应用程序的默认日志级别,确保在应用启动时日志记录的行为符合预期。
public class CustomSpringApplicationRunListener implements SpringApplicationRunListener {public CustomSpringApplicationRunListener(SpringApplication application, String[] args) {}@Overridepublic void contextPrepared(ConfigurableApplicationContext context) {System.out.println("Application context is prepared.");}@Overridepublic void contextLoaded(ConfigurableApplicationContext context) {System.out.println("Application context is loaded.");}
}

Spring Boot 3.x 的变动

在 Spring Boot 3.x 中,自动配置类的导入可以通过META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件来实现。
如下,ExternalConfig是不在启动类目录的配置类。

com.lw.sbex.ExternalConfig
@Configuration
public class ExternalConfig {@Beanpublic ExternalService external() {return new ExternalService();}
}

注意,只是自动配置功能移动到这边,其他功能,比如环境后置处理器和应用程序运行监听器,还是在 spring.factories,如下所示。

# EnvironmentPostProcessor 允许你在应用程序上下文创建之前修改环境。
org.springframework.boot.env.EnvironmentPostProcessor=\com.lw.sbdemo2.common.custom.CustomEnvironmentPostProcessor# SpringApplicationRunListener 允许你在应用程序的不同生命周期阶段进行操作。
org.springframework.boot.SpringApplicationRunListener=\com.lw.sbdemo2.common.start.CustomSpringApplicationRunListener

是否需要 @Configuration

spring.factories 配置的类一般用于不在启动类路径下的配置类,此时加不加 @Configuration 注解都可以,但建议加上。
@Configuration 注解是 Spring Boot 自动配置机制中必不可少的,它告诉 Spring Boot 哪类是一个配置类,应该被加载和应用。如果你在 spring.factories 中添加的类没有添加 @Configuration 注解,那么它不会被自动配置。
详细见下方说明:
在Spring框架中,使用spring.factories文件来添加自动配置类确实可以实现自动注册Bean,而不需要显式地使用@Configuration注解。这两种方式的区别主要体现在以下几点:
代码侵入性:
1、使用@Configuration注解的方式更加符合Spring的编程模型,具有更好的代码侵入性。这意味着代码的意图更加明确,易于理解和维护。
2、不使用@Configuration注解,仅仅通过spring.factories文件注册自动配置类,代码的侵入性较低,但可能使得代码的意图不够明确,特别是在大型项目中。
功能限制:
1、当使用@Configuration注解时,可以充分利用Spring提供的各种功能,如@Bean、@Component、@Lazy、@Profile等注解,以及条件注解(如@Conditional系列注解)等。
2、不使用@Configuration注解时,虽然仍然可以注册Bean,但无法直接使用上述功能,需要通过其他方式(如Java Config或XML配置)来实现。
配置的优先级:
1、在Spring Boot项目中,使用@Configuration注解的类会按照配置的顺序被加载,这意味着可以通过调整配置类的加载顺序来控制Bean的创建顺序。
2、通过spring.factories文件注册的自动配置类,其加载顺序可能不如@Configuration类那么容易控制。
Bean的作用域:
1、使用@Configuration注解,可以方便地定义Bean的作用域(如prototype、singleton等)。
2、不使用@Configuration注解时,默认情况下所有的Bean都是singleton作用域,要改变作用域需要通过其他配置方式实现。
总之,虽然不使用@Configuration注解也可以通过spring.factories文件添加自动配置类,但从代码的可读性、可维护性以及功能完整性方面考虑,建议使用@Configuration注解。这样可以使代码更加规范,也便于后续的开发和维护。


总结陈词

本篇文章介绍了 SpringBoot 框架中,使用 spring.factories 进行自动配置等诸多操作,仅供参考。
💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

CSDN_END.gif

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

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

相关文章

mysql 物理备份 MySQL 全量备份 增量备份 差异备份 日志备份万字长文 1.3万字

版权声明:本文为博主原创文章,遵循版权协议,转载请附上原文出处链接和本声明 注意,通常 完备增备,日志(binlog)备,结合使用 差异则根据具体情况选用。 此备份过程 属于公司 常用的单个数据…

凹凸纹理概念

1、凹凸纹理 纹理除了可以用来进行颜色映射外,另外一种常见的应用就是进行凹凸映射。凹凸映射的目的是使用一张纹理来修改模型表面的法线,让我们不需要增加顶点,而让模型看起来有凹凸效果。原理:光照的计算都会利用法线参与计算&…

数的个位相加

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 示例 1: 输入: num 38输出: 2 解释: 各位相加的过程为: 38 --> 3 8 --> 11 11 --> 1 1 --> 2 由于 2 是一位数,所以返回 2。…

搜维尔科技:驾驶模拟器背后的技术: Varjo的虚拟/混合现实 (VR/XR)提供独特的优势,最终加快汽车开发创新的步伐

专业驾驶模拟器广泛应用于车辆开发,帮助汽车行业在开发过程的早期做出更好的设计决策。总体目标是为测试驾驶员提供最真实的驾驶体验,包括动态动作和声音,并测试控制算法或辅助系统等功能。环境越真实,驾驶员的体验就越接近最终车…

视觉SLAM ch3补充——在Linux中配置VScode以及CMakeLists如何添加Eigen库

ch3中的所有代码,除了在kdevelop中运行,还可以在VScode中运行。下面将简要演示配置过程,代码不再做解答,详细内容在下面的文章中。(这一节中的pangolin由于安装过程中会出现很多问题,且后续内容用不到该平台…

自动化解决 reCAPTCHA v2:CapSolver 教程

对于那些经常进行网页爬取的人来说,你是否曾觉得 reCAPTCHA v2 就像是互联网版的过于严格的裁判员,总是在质疑你的真实性?但如果你能够轻松且合规地与这些裁判员达成和解,使你的网络搜索和自动化任务变得更顺畅,那该有…

k8s部署kubeadm init初始化不成功,coredns处于pending,master和nodes处于notready状态

声明:本文仅为个人学习笔记使用,解决方法参考原文: https://blog.csdn.net/Harry_mumu/article/details/132099876 在部署完k8s集群后,节点一直处于notready状态(master和nodes) 查看kubectl get pods -n…

全球海事航行通告解析辅助决策系统

“全球海事航行通告解析辅助决策系统”是一个针对海事行业设计的智能系统,旨在帮助海上导航和航运操作人员解析和应对全球发布的海事航行通告。 要做这样的系统我们必须要了解海事签派员的日常工作。 海事签派员,也称为船舶操作员或船运调度员&#xff0…

HanLP分词的使用与注意事项

1 概述 HanLP是一个自然语言处理工具包&#xff0c;它提供的主要功能如下&#xff1a; 分词转化为拼音繁转简、简转繁提取关键词提取短语提取词语自动摘要依存文法分析 下面将介绍其分词功能的使用。 2 依赖 下面是依赖的jar包。 <dependency><groupId>com.ha…

替代进程注入的新工具

目录 前言 Windows Session 的利用 Windows Session 介绍 跨会话激活技术 什么是跨会话激活机制&#xff1f; 常见的跨会话激活技术 结合利用 地址 前言 众所周知&#xff0c;常用的C2工具&#xff08;例如CobaltStrike&#xff09;在另一个进程上下文中执行代码经常使…

【Android】不同系统版本获取设备MAC地址

【Android】不同系统版本获取设备MAC地址 尝试实现 尝试 在开发过程中&#xff0c;想要获取MAC地址&#xff0c;最开始想到的就是WifiManager&#xff0c;但结果始终返回02:00:00:00:00:00&#xff0c;由于用得是wifi &#xff0c;考虑是不是因为用得网线的原因&#xff0c;但…

Fultter项目中IOS打包问题整理(附带解决方案)

Fultter项目中IOS打包问题整理&#xff08;附带解决方案&#xff09; 问题一&#xff1a;CocoaPods 在你的项目中找不到名为 AlicloudPush 版本为 ~> 1.9.1 的 Pod 规范。报错信息问题分析解决方法 问题二&#xff1a;ruby版本问题报错信息问题分析问题原因解决方法 问题三&…

WPS真题题库导入刷题小程序:个人使用经验分享

这篇文章的诞生&#xff0c;是因为我即将踏上一场超级有趣的挑战——备考全国计算机等级二级WPS Office高级应用与设计的冒险之旅&#xff01; WPS的分值&#xff1a; 单项选择题20分(含公共基础知识部分10分)。 WPS处理文字文档操作题30分。 WPS处理电子表格操作题30分。 …

挑战程序设计竞赛c++(第一天)1.抽签(枚举,二分法查找)2.三角形(暴力枚举)

方法一&#xff1a; #include<iostream> #include<algorithm> #include<vector>using namespace std; char flag0; int n0; int m0; int shu[1000]{0}; int i; int main() {cin >> n;cin >> m;for (i0;i<n;i){cin >> shu[i];}vector&l…

Design Compiler——综合及debug流程

文章目录 前言一、什么是综合&#xff1f;二、综合的流程1. Develop HDL files2. Specify libraries3. Read design4. Define design environment5. Set design constraints6. Select compile strategy7. Synthesize and optimize the design8. Analyze and resolve design pro…

idea 中的properties文件中文乱码

如遇到以下类似的问题&#xff1a; 配置setting中-》Editor-》File Encodings 中&#xff0c;将以下三处位置的编码格式进行修改 Global Encoding GBK Project Encoding GBK Default encoding for properties files UTF-8 修改之后文件的中文显示正常

老友记台词 第一季 第十四集 Friends 114(全英版)

文章目录 V114 The One With the Candy Hearts[Scene: Central Perk, Ross is eyeing a beautiful woman at the counter, and Joey and Chandler are egging him on to go talk to her. No pun intended. I mean it.][Scene: Central Perk, Monica, Rachel, Phoebe, Joey, Cha…

从源码到应用:医疗陪诊系统与在线问诊小程序开发详解

在数字化医疗时代&#xff0c;医疗陪诊系统与在线问诊小程序的开发成为了医疗机构和技术公司关注的焦点。接下来&#xff0c;小编将与您一同深入了解。 一、医疗陪诊系统的核心功能 医疗陪诊系统旨在为患者提供更贴心的医疗服务&#xff0c;通过专业人员陪同患者完成就医过程。…

【C语言篇】C语言常考及易错题整理DAY1

文章目录 C语言常考及易错题整理选择题全局、局部和静态变量#define与typedef转义字符操作符循环其他 编程题计算日期到天数转换柯尼希定理旋转数组的最小数字描述错误的集合整数转换密码检查 C语言常考及易错题整理 选择题 全局、局部和静态变量 执行下面程序&#xff0c;正…

[000-01-030].第3节 :搭建Zookeeper集群环境

1.搭建Zookeeper集群环境 1.1.集群安装&#xff1a; a.集群规划&#xff1a; 在 hadoop103(192.168.2.3)、hadoop104(192.168.2.4) 和 hadoop105&#xff08;(192.168.2.5&#xff09; 三个节点上都部署 Zookeeper b.解压安装&#xff1a; 1.下载zookeeper压缩版本&#x…