如何快速自定义一个Spring Boot Starter!!

目录

引言:

一. 我们先创建一个starter模块

二. 创建一个自动配置类

 三. 测试启动


引言:

在我们项目中,可能经常用到别人的第三方依赖,又是引入依赖,又要自定义配置,非常繁琐,当我们另一个项目过程使用的时候,还是同样的操作,以此,为什么我们不直接封装起来成为一个sarter启动类,在我们需要使用的时候,直接就引入依赖,DI注入就可以使用,通过springBoot的自动配置来帮我们加载配置注入!!!用的时候,只需要注入就可以使用了!!!

一. 我们先创建一个starter模块

用来统一管理要导入相关的配置依赖,这样子我们引入一个starter依赖就可以了,通过Maven依赖的传递,其他配置依赖也就传递进来了!!!

二. 创建一个自动配置类

在创建我们的configuration模块中,在Starter中引入改模块(当然简便的化也可以直接就引入这个模块依赖,也是可以的)

三.欧克,我们就可以在configuration中 来自定义配置类了,并自动配置文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件就可以了

就随便来模拟一下了

yam中配置一些属性以便后面获取

hz:name: isHeZage: 18

定义一个helloWorldProperties类,通过@ConfigurationProperties注解。这个注解用于将配置文件中的属性绑定到Java Bean上,很方便地在Spring应用程序中使用这些配置属性。

如果提升没有配置注解处理器

点击进去,可以看见官网提供的

 把这个CV到Pom文件中就可以了

此时爆红

因为当前类不是一个Bean类,一般我们会加一个 @Component来声明当前类是一个配置类,那是在当前配置类项中使用的时候,是会扫描到当前配置类的,现在我们是第三方Bean,其他项目使用的时候是扫描不到,我们可以通过EnableConfigurationProperties这个注解,直接可以交给IOC容器中成功里面的Bean对象,其实底层还是封装的Import注解。但是这个只能放在配置类上或者Bean对象上,Ok我们这里直接把他放到我们自定义配置类上。新键一个自定义配置类

@Configuration
@EnableConfigurationProperties(helloWorldProperties.class )
public class helloWorldConfiguration {
}

然后接下来配置我们需要用到的@Bean对象了!!!

先建立一个类HelloHz,并且这里给了一个set方法,到时候把我们的helloWorldProperties引进来


public class HelloHz {private helloWorldProperties helloWorldProperties;public void setHelloWorldProperties(helloWorldProperties helloWorldProperties) {this.helloWorldProperties = helloWorldProperties;}public String getThePropertiesName(){return helloWorldProperties.getName();}public Integer getThePropertiesAge(){return helloWorldProperties.getAge();}}

欧克,我们在配置类中来声明我们的Bean来完成自动配置,写一个方法,返回值就是我们的HelloHz类

@Configuration
@EnableConfigurationProperties(helloWorldProperties.class)
public class helloWorldConfiguration {@Beanpublic HelloHz helloHz(helloWorldProperties properties) {HelloHz helloHz = new HelloHz();helloHz.setHelloWorldProperties(properties);return helloHz;}
}

 这里第三方Bean的时候,需要某个对象,我们直接通过参数的形式注入就完事了,spring到时候会自动跟据这个类型完成自动装配的

最后一步,我们还需要把这个自定义配置类的全类名放到规定的文件下就是META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

欧克完事,我们直接分别打包到本地仓库 

 三. 测试启动

欧克,我们在新键一个项目来引入我们starter依赖看看,我们只需要引入starter依赖就可以了,因为我们的starter依赖已经引入了一个我们的那个自定义的配置模块依赖了。

可以看见已经引入进来了 

 

Test:

@SpringBootTest
public class SpringCsl {@Autowiredprivate HelloHz helloHz;@Testpublic void csl() {System.out.println("helloHz = " + helloHz.getThePropertiesName());System.out.println("helloHz = " + helloHz.getThePropertiesAge());}
}

启动;

 

欧克,没问题,因为我们这里没有配置,我们重新在新项目的yml文件中来配置一下:

hz:name: isTheHzage: 18

再次启动:

 

坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 坤 

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

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

相关文章

【C++报错已解决】std::ios_base::floatfield

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

8609 哈夫曼树

### 思路 1. **选择最小权值节点**:在哈夫曼树构建过程中,选择两个权值最小且父节点为0的节点。 2. **构建哈夫曼树**:根据权值构建哈夫曼树,确保左子树权值小于右子树权值。 3. **生成哈夫曼编码**:从叶子节点到根节点…

极限基本类型小结

极限基本类型小结 在之前的文章中已经看过了极限的多种基本类型,下面展示一些各种基本类型的代表性的图像,通过观察下面的图像可以帮助我们回顾函数在趋近于某一点时函数值的行为(这也叫极限值),也生动的描述了各种极…

初始爬虫9

1.元素定位后的操作 “find_element“仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法”。下面列出了两个方法: 获取文本 element.text 通过定位获取的标签对象的 text 属性,获取文本内容 获取属性…

C语言进阶版第13课—字符函数和字符串函数2

文章目录 1. strstr函数的使用和模拟实现1.1 strstr函数的使用1.2 模拟实现strstr函数1.3 strstr函数和strncpy函数、puts函数的混合使用 2. strtok函数的使用**3. strerror函数的使用** 1. strstr函数的使用和模拟实现 1.1 strstr函数的使用 strstr函数是用来通过一个字符串来…

Linux进程-2

一:进程优先级 基本概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。 还可以把进程运行到指定的CPU上&#…

Mysql数据库相关操作总结

目录 1.背景知识 2.创建数据库 2.1创建指令 2.2字符集 3.查看数据库 3.选中数据库 4.删除数据库 5.数据表的操作 5.1基本数据类型 5.2创建表 5.3查看所有的表 5.4查看表的结构 5.5删除表 6.CRUD增删查改 6.1新增和效果查看 6.3删除 6.4查找 1.背景知识 数据库就…

哈希知识点总结:哈希、哈希表、位图、布隆过滤器

目录 哈希 哈希表 哈希常用方法 1、直接定址法 2、存留余数法 哈希冲突 哈希冲突的解决办法 1、闭散列:开放定址法 (1)线性探测法 (2)二次探测法 2、开散列 哈希桶 / 拉链法 哈希的运用 位图 set操作 …

3-3 AUTOSAR RTE 对SR Port的作用

返回总目录->返回总目录<- 一、前言 RTE作为SWC和BSW之间的通信机构,支持Sender-Receiver方式实现ECU内及ECU间的通信。 对于Sender-Receiver Port支持三种模式: 显式访问:若运行实体采用显示模式的S/R通信方式,数据读写是即时的;隐式访问:当多个运行实体需要读取…

Docker安装与应用

前言 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻 量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互 之间…

关于Fake Location定位,运动世界校园问题

不好意思&#xff0c;之前那个文章其实是很早之前的&#xff0c;不知道为什么审核了很久一直没有通过&#xff0c;然后前几周莫名其妙点了一下重新发布&#xff0c;竟然发布成功了&#xff0c;这个方法已经失效了&#xff0c;要可以稳定&#xff0c;我建议是买一台root的手机&a…

鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务

使用场景 Sensor Service Kit&#xff08;传感器服务&#xff09;使应用程序能够从传感器获取原始数据&#xff0c;并提供振感控制能力。 Sensor&#xff08;传感器&#xff09;模块是应用访问底层硬件传感器的一种设备抽象概念。开发者可根据传感器提供的相关接口订阅传感器…

Docker容器的使用

前提条件 Linux环境安装好Docker&#xff0c;可参考Rocky Linux9下安装Docker和卸载Docker Docker命令图 帮助命令 帮助命令&#xff0c;查看有哪些命令可以用 [rootlocalhost ~]# docker --help ​ 查看某个命令的帮助&#xff0c;例如&#xff1a;run [rootlocalhost ~]# …

深入探索机器学习中的目标分类算法

在当今数据驱动的世界中&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff09;正逐渐成为解决问题的重要工具。在众多机器学习任务中&#xff0c;目标分类&#xff08;Classification&#xff09;算法尤其受到关注。本文将深入探讨目标分类算法的基本概念、常见类…

【刷点笔试面试题试试水】 i++与++i哪个效率更高?

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: 都应该知道,i是先增加再参与计算. i是先计算再增加. 原理是i,是直接返…

免费的录屏软件有哪些?可以试试这4款。

录屏软件已经被用于很多的领域和场景当中&#xff0c;能够帮助我们进行在线教学&#xff0c;线上培训&#xff0c;游戏直播与分享&#xff0c;视频记录等等。并且很多的录屏软件都有免费的功能&#xff0c;它们让大家的录屏变得更加的方便。如果大家需要录屏工具的话&#xff0…

认知杂谈92《菜鸟的自我修炼:守住存款,识别诱惑》

内容摘要&#xff1a; “快速致富"的口号在网络和广告中无处不在&#xff0c;它们吸引着渴望改变生活的人。然而&#xff0c;这些诱惑常常是精心设计的骗局&#xff0c;利用人的贪婪本性。成功学导师们宣扬的"成功秘诀"和"快速通道”&#xff0c;让人陷入不…

【MATLAB代码】三维空间上的RSS(信号强度)定位,n个锚点自适应(锚点数>3即可)(源代码下载链接)

文章目录 代码概况源代码运行结果RSS定位原理讲解1.基本概念2.信号强度与距离关系3. 定位原理 其他情况 代码概况 基于MATLAB的定位程序&#xff0c;使用RSS&#xff08;接收信号强度&#xff09;来估计距离&#xff0c;再由距离计算位置&#xff0c;用于三维空间上的定位。调…

一行代码,AI大模型训练成本再降30%,混合精度训练再升级

FP8通过其独特的数值表示方式&#xff0c;能够在保持一定精度的同时&#xff0c;在大模型训练中提高训练速度、节省内存占用&#xff0c;最终降低训练成本。 AI大模型开发系统Colossal-AI的混合精度训练再度升级&#xff0c;支持主流的BF16(O2) FP8(O1)的新一代混合精度训练方…

基于php的民宿预订管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…