SpringBoot的starter原理及如何自定义starter

2023-11-13

一、starter简介
Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。
总结:

1.它整合了这个模块需要的依赖库;
2.提供对模块的配置项给使用者;
3.提供自动配置类对模块内的Bean进行自动装配;

例如,在Maven的依赖中加入spring-boot-starter-web就能使项目支持Spring MVC,并且Spring Boot还为我们做了很多默认配置,无需再依赖spring-web、spring-webmvc等相关包及做相关配置就能够立即使用起来。

二、starter 命名规则
Spring 官方定义的 Starter 通常命名遵循的格式为 spring-boot-starter-{name},例如 spring-boot-starter-data-mongodb。Spring 官方建议,非官方 Starter 命名应遵循 {name}-spring-boot-starter 的格式,例如,myjson-spring-boot-starter。

三、starter开发步骤

1.新建Maven项目,在项目的POM文件中定义使用的依赖;
2.新建配置类,写好配置项和默认的配置值,指明配置项前缀;
3.新建自动装配类,使用@Configuration和@Bean来进行自动装配;
4.新建spring.factories文件,指定Starter的自动装配类;

四、引入starter组件
在starter项目的resources下新建 META-INF 文件夹,然后创建spring.factories文件

# springboot自动装配机制 会读取该配置 进行自动装配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.hnlcwx.logcommon.autoconfig.FeignConfiguration

spring.factories 书写规则
spring.factories 由 key = value 结构组成

key为接口类,可以使用spring的接口,可以使用自定义的接口(自定义接口实现类必须加上 @component才能被加载)
value为需要加载的实现类,不是必须实现interface

五、自定义 starter 时会可能会用到的注解

@Conditional:按照一定的条件进行判断,满足条件给容器注册bean
@ConditionalOnMissingBean:给定的在bean不存在时,则实例化当前Bean
@ConditionalOnProperty:配置文件中满足定义的属性则创建bean,否则不创建
@ConditionalOnBean:给定的在bean存在时,则实例化当前Bean
@ConditionalOnClass: 当给定的类名在类路径上存在,则实例化当前Bean
@ConditionalOnMissingClass :当给定的类名在类路径上不存在,则实例化当前Bean
@ConfigurationProperties:用来把 properties 配置文件转化为bean来使用
@EnableConfigurationProperties:使 @ConfigurationProperties 注解生效,能够在 IOC 容器中获取到转化后的 Bean

学习资料
1、https://juejin.cn/post/7193996189669261370
2、https://www.jianshu.com/p/bbf439c8a203
3、https://juejin.cn/post/6844903919601057805
4、https://cloud.tencent.com/developer/article/1927592

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot的starter原理及如何自定义starter 的相关文章

随机推荐

  • errors and 0 warnings potentially fixable with the `--fix` option.

    vue 项目运行过程中出现 3 errors and 0 warnings potentially fixable with the fix option 的错误 报错问题 原因一 在创建vue项目中 会选择linter Formatter
  • 记一次MQ并发消费导致任务状态异常问题

    背景 项目中有一个短信群发任务 例如1次要发送1W条短信 系统会获取任务中每一条短信的MQ并发发送短信 任务默认状态是未发送 状态码 0 需要在这一批任务发送第一条短信的时候 将任务状态修改为发送中 状态码 1 在任务发送结束将状态修改为发
  • 轻量级卷积神经网络的设计技巧

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 这篇文章将从一个证件检测网络 Retinanet 的轻量化谈起 简洁地介绍 我在实操中使用到的设计原则和idea 并贴出相关的参考资料和成果供读者参考 因此本文是一篇注重
  • networkmanager is not running 网络管理没有运行

    如果确定网卡什么都安装好了 可以下面指令打开 network manager 服务 打开 sudo service network manager start PS network manager 服务 关闭 sudo service ne
  • 基于Linux的人脸识别功能

    前言 需要在翔云平台注册并购买人脸识别服务 通过https协议与个人中心的key和secret 与平台建立连接 说明 使用http协议需要安装libcurl库 而使用https协议需要安装libcurl库选择加入ssl服务 ssl服务依赖于
  • emoji引起的mysql utf-8mb4问题

    场景 在业务中发现备注输入emoji表情后后台系统异常 定位原因发现mysql表不支持此类字符集 mysql版本为5 6 字符集为utf 8 解决 将字符集改为utf 8mb4 报错信息 Incorrect string value xF0
  • 二叉搜索树-红黑树

    前面介绍了AVL树 虽然AVL树将二叉树的高度差保证在1 但是实现的太过复杂 因为要不断调整平衡因子 故而要来介绍另外一个用途比较广的结构 红黑树 红黑树 先来看来红黑树的特性 1 每个节点非红即黑 2 根节点为黑色 3 不能有连续的红节点
  • 智能优化算法——灰狼优化算法(Python&Matlab实现)

    目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2 1 社会等级分层 2 2 包围猎物 2 3 狩猎 2 4 攻击猎物 2 5 寻找猎物 3 实现步骤及程序框图 3 1 步骤 3 2 程序框图 4 Python代码实现 5 Matla
  • 各大网站镜像源

    可设置maven npm 等等的下载源 1 腾讯镜像源 https mirrors cloud tencent com 2 华为开源镜像站 https mirrors huaweicloud com 3 阿里巴巴开源镜像站 https op
  • 怎样提取一个数的十位个位百位千位

    设一个数为n 则在C语言中其个位 十位 百位 千位依次这样计算zhi n 1 10 n 10 10 n 100 10 n 1000 10 include
  • Fibonacci数列

    题目描述 Fibonacci数列是这样定义的 F 0 0 F 1 1 for each i 2 F i F i 1 F i 2 因此 Fibonacci数列就形如 0 1 1 2 3 5 8 13 在Fibonacci数列中的数我们称为Fi
  • 测试用例(三)需求分析与提取测试点

    一 需求分析 一般由产品经理完成 1 业务需求 关注系统是否满足业务 2 用户需求 关注系统是否满足用户习惯 3 功能需求 关注系统是否满足功能要求 如果没有需求怎么办 参考市面上已经上线的同类产品 如果需求模糊怎么办 收集整理已有的需求
  • ES了解多少?说说你们公司的ES集群架构

    ES了解多少 说说你们公司的ES集群架构 介绍 核心概念 如何保证ES集群架构的安全性 ES的使用场景 介绍 ES 是一个基于Lucene框架的搜素引擎产品 you know for search 提供了Restful风格的操作接口 Luc
  • vue中通过render函数给子组件设置ref

    正常我们的写法是 这样ref不会生效 h是作用在渲染的时候的 而ref是渲染之后才创建的 因此在h函数中使用ref是无效的 render h params gt return h expandRow ref child props row
  • linux运行run文件显示cannot execute binary file

    感谢朋友支持本博客 欢迎共同探讨交流 由于能力和时间有限 错误之处在所难免 欢迎指正 如果转载 请保留作者信息 博客地址 http blog csdn net qq 21398167原博文地址 http blog csdn net qq 2
  • Linux系统查看内存使用情况

    操作系统 文章目录 操作系统 一 查看内存使用情况 1 使用 free 命令 2 查看 proc meminfo 3 使用 vmstat 命令 4 使用 top 命令 5 htop 命令 二 查看物理内存信息 小结 参考链接 一 查看内存使
  • 【Python 3.7】餐馆:创建一个名为 Restaurant 的类,其方法 __init__() 设置两个属性:restaurant_name 和 cuisine_type 。

    Python 3 7 餐馆 创建一个名为 Restaurant 的类 其方法 init 设置两个属性 restaurant name 和 cuisine type 创建一个名为 describe restaurant 的方法和一个名为 op
  • 【Python】将Numpy数组保存为图像

    点击阅读原文
  • U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集

    前言 博客很久没有更新了 今天就来更新一篇博客吧 哈哈 最近在做图像分割相关的任务 因此 写这么一篇博客来简单实现一下分割是怎么做的 内容简单 枯燥 需要耐心看 哈哈 博客的内容相对简单 比较适合刚接触分割的同学参考学习 这篇博客在算法训练
  • SpringBoot的starter原理及如何自定义starter

    一 starter简介 Starter是Spring Boot中的一个非常重要的概念 Starter相当于模块 它能将模块所需的依赖整合起来并对模块内的Bean根据环境 条件 进行自动配置 使用者只需要依赖相应功能的Starter 无需做过