SpringBoot使用AutoConfigure实现依赖库自动导入配置

news2024/10/7 4:30:08

我们知道导入配置有两种,一种是@Value,一种是@ConfigurationProperties,将对应的类标记为Component即可导入。但是被注解标识的类创建Bean有一个前提,只对启动类所在的包路径下的所有带有@Component等注解的类才会创建Bean。如果我们封装的是一个公共依赖库,这些配置是不会自动导入到我们的程序中的。这时需要AutoConfigure来实现。

1、定义一个类存储配置信息,类的成员变量大家自行定义,如果不想生成get和set方法,可以使用Lombok的Getter和Setter注解。

@Setter
@Getter
@Component
@ConfigurationProperties(prefix = "app")
public class MyAppProperties {
    private Boolean testFlag;
    private String testName;
}

2、编写自动装配类,用于导入配置并生成Bean实例。

@AutoConfiguration
@ConditionalOnClass({MyAppProperties.class})
@EnableConfigurationProperties({MyAppProperties.class})
public class MyAppPropertiesAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean(name = {"myAppProperties"})
    public MyAppProperties myAppProperties() {
        return new MyAppProperties();
    }
}

其中关键点有两个:一是@AutoConfigure注解,用于自动导入配置,二是@EnableConfigurationProperties注解,用于标记自动导入配置到MyAppProperties实例中。

3、按需增加条件注解。条件注解是为了确保依赖条件。

ConditionalOnClass用于确保指定类存在时才启用配置,这也是很多依赖库可以在pom中引入后自动加载配置,不引用依赖时不生效。

ConditionalOnMissingBean用于确保指定名称的Bean在IOC容器中不存在,确保最终只有一个实例。

ConditionalOnMissingClass用于在某个类不存在时进行导入,比如:Springboot判断其他数据库连接池不存在时,才实例化默认的HikariCP连接池。

ConditionalOnProperty通过配置文件的配置来控制配置类是否加入spring的IOC容器。

条件注解非常多,不止可以用于自动导入场景,可以单独写一篇了。

4、增加自动配置列表文件

在resources目录下,增加META-INF/spring目录,并新建文件org.springframework.boot.autoconfigure.AutoConfiguration.imports,文件名一定不要错。

文件内容为第二步定义的Configure类的全路径,包括完整包名,每行写一个。

注:在Springboot的2.7版本之前,还可以放在META-INF/spring.factories文件中,org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件功能与 spring.factories一样,都是用来加载自动装配的类。但为了兼容性,不推荐使用spring.factories了。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.test.springboot.autoconfigure.MyAppPropertiesAutoConfiguration

5、之后将依赖库打包发布,就可以自动导入配置了,IDEA也会出现相应的智能提示。

(应用侧的主函数有@SpringBootApplication注解,已经包含了EnableAutoConfiguration,所以不需要额外代码了。)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理,与一线生产过程相融合,集成数据后台,统一前端入口,呈现多方项目信息;

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理,与一线生产过程相融合,集成数据后台,统一前端入口,呈现多方项目信息; 智慧工地是指运用信息化手段,通过三维设计平台对工程项目进行精确设计和施工…

Java程序之素数问题

题目: 判断101-200之间有多少个素数,并输出所有素数。 程序分析: 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。素数被利用在密码学上&#…

Kubernetes排错(七)-Pod 状态一直 ContainerCreating

查看 Pod 事件 $ kubectl describe pod apigateway-6dc48bf8b6-l8xrw -n cn-staging 异常原因 1)no space left on device ... Events:Type Reason Age From Message---- ------ …

移远通信发布高性价比智能模组SC200P系列,赋能金融支付等行业智慧升级

近日,全球领先的物联网整体解决方案供应商移远通信宣布,为满足智慧金融、智能家居、智能穿戴、工业手持等消费和工业应用对高速率、多媒体、长生命周期等终端性能的需求,其正式推出基于紫光展锐UNISOC 7861平台的全新8核4G智能模组SC200P系列…

TypedDict 解析

TypedDict 解析 文章目录 TypedDict 解析1. 类型安全性2. 可读性3. 可维护性TypedDict 的解决方案没有 TypedDict 会发生什么?使用 TypedDict 的优势 TypedDict 应用场景1. 配置文件解析2. API 数据解析3. 数据库记录表示4. 表单数据验证5. 大型团队协作6. 静态类型…

数据可视化在智慧社区中的关键应用

数据可视化能够在智慧社区中发挥重要作用,通过直观和交互的方式将复杂的数据呈现出来,提升社区管理效率,优化居民生活体验,促进社区的可持续发展。在智慧社区中,数据可视化的应用涵盖了安全、环境、能源、交通和公共服…

AI播客下载:Eye on AI(AI深度洞察)

"Eye on A.I." 是一档双周播客节目,由长期担任《纽约时报》记者的 Craig S. Smith 主持。在每一集中,Craig 都会与在人工智能领域产生影响的人们交谈。该播客的目的是将渐进的进步置于更广阔的背景中,并考虑发展中的技术的全球影响…

【React】登录-封装Token的存取删方法--共享复用

在token.js中 // 封装存取方法const TOKENKEY token_keyfunction setToken (token) {return localStorage.setItem(TOKENKEY, token) }function getToken () {return localStorage.getItem(TOKENKEY) }function clearToken () {return localStorage.removeItem(TOKENKEY) }ex…

tensorRT C++使用pt转engine模型进行推理

目录 1. 前言2. 模型转换3. 修改Binding4. 修改后处理 1. 前言 本文不讲tensorRT的推理流程,因为这种文章很多,这里着重讲从标准yolov5的tensort推理代码(模型转pt->wts->engine)改造成TPH-yolov5(pt->onnx-…

微信小程序毕业设计-在线厨艺平台系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

XSS漏洞实验

本篇为xss漏洞实验练习,练习网址来源于网络 练习网址:XSS平台|CTF欢迎来到XSS挑战|XSS之旅|XSS测试 一、前置说明 在测试过程中,有哪些东西是我们可以利用来猜测与判断的: 网页页面的变化;审查网页元素;查…

奇瑞复活经典路虎!中国技术,英国车标,卖向全球

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 6月19日,奇瑞和捷豹路虎宣布签署战略合作意向书,将复活“Freelander神行者”品牌。 小编当课代表,做个简单总结: 英国品牌,中国技术&#xf…

数组 (java)

文章目录 一维数组静态初始化动态初始化 二维数组静态初始化动态初始化 数组参数传递可变参数关于 main 方法的形参 argsArray 工具类sort 中的 comparable 和 comparatorcomparator 比较器排序comparable 自然排序 一维数组 线性结构 静态初始化 第一种:int[] a…

基于uni-app和图鸟UI开发上门服务小程序

一、技术栈选择 uni-app:我们选择了uni-app作为开发框架,因为它基于Vue.js,允许我们编写一次代码,发布到多个平台,包括iOS、Android、Web以及各种小程序。uni-app的丰富组件库、高效的状态管理以及便捷的预览调试功能&…

无霍尔BLDC驱动

目前主要的无霍尔控制方案是基于反电势检测信 息判断换相点,本文研究反电势在 PWM - OFF 点的检 测方案确定换相点。 1. 反电动势检测方案 BLDC 的模型做等效,将线圈阻抗看成是一个 线性电阻和一个储能电感的等效,其等效电路图如图 1所示。 电机三相绕组输出端电压的电压…

【PL理论深化】(3) MI 归纳法:归纳假设 (IH) | 结构归纳法 | 归纳假设的证明

💬 写在前面:所有编程语言都是通过归纳法定义的。因此,虽然编程语言本身是有限的,但用该语言编写的程序数量是没有限制的,本章将学习编程语言研究中最基本的归纳法。本章我们继续讲解归纳法,介绍归纳假设和…

issues.sonatype.org网站废弃,Maven仓库账号被废弃问题解决

问题起因: 今天自己的项目发布了一个新版本,打算通过GitHub流水线直接推送至Maven中央仓库,结果发现报错 401,说我的账号密码认证失败。我充满了疑惑我寻思难度我的号被盗掉了吗。于是我打开Nexus Repository Manager尝试登录账号…

最新下载:XmanagerXShell【软件附加安装教程】

​相信大家都认同支持IPv6:最近越来越多的公司和国家都采用了IPv6,Xmanager的最新版本v5也加入支持这个功能,无论你是同时使用IPv4和IPv6网络或者完全的IPv6网络,Xmanager 5都可完全满足你的要求,使用MIT Kerberos认证…

Vue41 ref属性

ref属性 ref是Vue提供的获取组件的属性 <template><div><h1 v-text"msg" ref"title"></h1><button ref"btn" click"showDOM">点我输出上方的DOM元素</button><MySchool ref"sch"…

Android开发神器:OkHttp框架源码解析

NetworkInterceptors CallServiceInterceptor 1.RealInterceptorChain.proceed() 2.EventListener.callStart()也是在RealCall.execute()嵌入到Request调用过程, EventListener.callEnd()位于StreamAllocation中调用 3.Request.Builder url (String/URL/HttpUrl) header …