springBoot-SpringBoot自定义starter

在一个空Maven项目中,新增xxxx-spring-boot-starterxxxx-spring-boot-autoconfigure两个模块,xxxx是你这个starter是做什么的,模块xxxx-spring-boot-starter主要是作依赖管理,外界使用我们自定义的starter只需要导入我们xxxx-spring-boot-starter模块即可。自定义的xxxx-spring-boot-autoconfigure模块,是我们编写自动注入的地方,需要引入了Spring的spring-boot-autoconfigure模块,这个模块在创建SpringBoot项目的时候会自动引入的,也是必须引入的,通过加载META-INF文件夹下的spring.factories文件完成自动配置的功能以及开箱即用的效果。

一,创建项目

1.1 创建空项目

在这里插入图片描述

输入完项目名称,点击完成进入下图步骤:
在这里插入图片描述

1.2 创建starter模块

在这里插入图片描述

选择Maven不需要使用任何模板,点击完成进入下一步
在这里插入图片描述

输入模块名称,点击完成即可。

1.3 创建autoconfigure模块

继续点击添加模块:

在这里插入图片描述

这次选择,SpringBoot项目,点击下一步
在这里插入图片描述

输入组织名称等信息后,点击下一步

在这里插入图片描述

输入模块名成等信息后,点击完成。

在这里插入图片描述

点击ok,完成创建。

在starter模块中引入自动配置模块:

<!--启动器-->
<dependencies><!--引入自动配置模块--><dependency><groupId>com.zyh.starter</groupId><artifactId>zyh-springboot-starter-autoconfigurer</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- 也可导入其他模块 -->
</dependencies>

在autoconfigurer模块中引入了Spring的spring-boot-starter模块

<!--自动引入的 也是必须引入的 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>

二,编写autoconfigurer模块

2.1 创建自动配置类

仿照WebMvcAutoConfiguration自动配置,简单实现:

创建 HelloProperties类:

@ConfigurationProperties(prefix = "zyh.hello")
public class HelloProperties {private String prefix;private String suffix;public String getPrefix() {return prefix;}public void setPrefix(String prefix) {this.prefix = prefix;}public String getSuffix() {return suffix;}public void setSuffix(String suffix) {this.suffix = suffix;}
}

通过@ConfigurationPropertie 注解将配置文件的内容绑定到实体类,注意:只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean。

创建 HelloServiceAutoConfiguration类:

@Configuration
@ConditionalOnWebApplication //web应用才生效
@EnableConfigurationProperties(HelloProperties.class) // 将HelloProperties类添加到IOC容器中
public class HelloServiceAutoConfiguration {@AutowiredHelloProperties helloProperties;@Bean// 通过 @Bean的方式注入组件public HelloService helloService(){HelloService service = new HelloService();        return service;}
}
2.2 加载自动配置类

在resources文件夹下创建META-INF/spring.factories文件,文件内容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.zyh.HelloServiceAutoConfiguration

\代表换行,多个自动配置类可以以" , "分割。

在autoconfigurer模块的pom中必须引入了spring-boot-autoconfigure,这里我们来解释一下,为什么自定义satrter必须要导入spring-boot-autoconfigure的原因,springBoot的自动装配的原理,将需要启动就加载的自动配置类,在类路径下,创建META-INF/spring.factories文件通过spi的机制加载。

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

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

相关文章

记 Hyperf booted模型事件的使用

前因 产品经理提了一个需求&#xff0c;要求能自定义内容的创建时间&#xff0c;当前事件大于创建时间时&#xff0c;才能查询到这些内容&#xff0c;并对内容进行操作 我的第一反应&#xff1a;不算麻烦&#xff0c;只需要在仓储层的查询方法中&#xff0c;给每个查询都多加…

Golang Copy()方法学习

前言 主要是涉及到深浅拷贝相关的&#xff0c;但是在看的一个资料过程中发现他有错…并且一系列&#xff0c;复制粘贴他的&#xff0c;也都错了。 错误文章指路 很显然&#xff0c;Copy是深拷贝啊&#xff01;&#xff01;&#xff01; Copy功能 copy的代码很少&#xff0c…

9.WEB渗透测试-Linux基础知识-Linux用户权限管理(上)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;8.WEB渗透测试-Linux基础知识-Linux基础操作&#xff08;二&#xff09;-CSDN博客 用户管…

如何在jupyter notebook 中下载第三方库

在anconda 中找到&#xff1a; Anaconda Prompt 进入页面后的样式&#xff1a; 在黑色框中输入&#xff1a; 下载第三方库的命令 第三方库&#xff1a; 三种输入方式 标准保证正确 pip instsall 包名 -i 镜像源地址 pip install pip 是 Python 包管理工具&#xff0c;…

【笔记】【电子科大 离散数学】 3.谓词逻辑

谓词引入 因为含变量的语句&#xff08;例如x > 3&#xff09;不是命题&#xff0c;无法进行逻辑推理。 为了研究简单命题句子内部的逻辑关系&#xff0c;我们需要对简单命题进行分解&#xff0c;利用个体词&#xff0c;谓词和量词来描述它们&#xff0c;并研究个体与总体…

非阻塞实现高效键盘扫描功能(STM32F4XX)

目录 概述 1 原理分析 1.1 技术背景 1.2 系统硬件 1.3 STM32 IO&#xff08;输入模式&#xff09;寄存器分析 1.3.1 输入IO的功能描述 1.3.2 输入配置 1.3.3 GPIO 寄存器&#xff08;输入模式相关&#xff09; 1.3.3.1 GPIO 端口模式寄存器 1.3.3.2 GPIO 端口上拉/下拉…

通过联合部署DDoS高防和WAF提升网站防护能力

如果您的网站遭受的攻击既有流量型攻击&#xff0c;又混杂精巧的Web应用层攻击时&#xff08;例如SQL注入、跨站脚本攻击、命令注入等&#xff09;时&#xff0c;推荐您组合使用阿里云DDoS高防和Web 应用防火墙 WAF&#xff08;Web Application Firewall&#xff09;&#xff0…

NumpyPython 笔记2 3.5

如果不是矩阵的话&#xff0c;也可以用索引 矩阵也可以 np.vstack 上下合并两个数组 np.hstack 左右合并两个数组 没看懂 np.array 可以合并三个 np.concatenate 可以在后面axis定制是在行还是列上进行合并 np.split(A,2,axis1):对哪个东西&#xff0c;分成多少块&#…

Linux安全加固功能

提示:工具下载链接在文章最后 目录 一.加固功能介绍二.配置加固功能1.配置安全加固功能1.1 开放目前设备监听的所有端口1.2 只开放80、443、20、21、22端口1.3 防火墙配置工具1.3.1 开放允许访问的端口1.3.2 删除允许访问的端口1.3.3 添加IP地址允许访问规则1.3.4 添加IP地址禁…

数据库设计革命:逻辑模型的演变与面向对象的突破

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

Typescript的联合类型和交叉类型

联合类型 在 TypeScript 中&#xff0c;可以使用联合类型来定义对象接口&#xff0c;从而表示一个对象可以具有多种不同结构的类型。联合类型是或的关系!!! interface Circle {kind: "circle";radius: number; }interface Square {kind: "square";sideLe…

【C++干货基地】面向对象核心概念 | 访问限定符 | 类域 | 实例化 | 类对象模型

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…