SpringBoot之自定义Starter

news2025/1/14 1:01:50

目录

一、自己的理解

1. 理解一

2. 理解二

二、自定义starter(重点)

三、以mybatis-spring-boot-starter为例进行分析

1. 写好自己的自动配置类逻辑

2. 创建自己的starter项目并引入自动配置类项目的依赖

3. 在其它项目中使用自定义的starter

一、自己的理解

1. 理解一

自定义Starter的常规流程:

(1)自定义一个项目,叫做 xxx-spring-boot-autoconfigure (比如mybatis-spring-boot-autoconfigure), 在这个项目里面写自定义的配置类:xxxAutoConfiguration ---> xxxProperties,然后在项目的 META-INF/spring.factories文件中把自己的自动配置类配置进去(可以参照其它starter进行配置)从而使得项目启动自动加载指定的自动配置类;

(2)自定义一个项目,artifactId叫做xxx-spring-boot-starter (比如mybatis-spring-boot-starter)

(3)在(2)中引入(1)的依赖【即starter的pom文件里面引入autoconfigure包】

(4)在其它项目中使用自定义的Starter,就是引入(2)的依赖,然后在自己的配置文件中配置需要和xxxProperties绑定的配置信息,这样就可以在自己的项目中使用自定义的starter了。

2. 理解二

        场景启动器里面没有源代码,场景启动器里面一般只负责在其pom文件里面声明这个场景启动器有哪些依赖,同时场景启动器里面引入了当前场景的自动配置依赖,而在自动配置包里面要引入springboot最底层的,每一个模块都要引入的spring-boot-starter,如下图:

二、自定义starter(重点)

        根据 <理解二>中的图,自定义一个starter,其详细步骤如下:

(1) 创建一个空工程,空工程里面可以容纳多个项目,如下图:

 (2)在新的空工程里面创建第一个模块(场景启动器starter模块)

shg-hello-spring-boot-starter 如下图:

(3)在新工程里面创建第二个模块(自动配置模块),如下图:

 (4)场景启动器(shg-hello-spring-boot-starter) 里面需要引入 自动配置模块 (shg-hello-spring-boot-starter-autoconfigure),如下图:

(5)<自动配置>这个项目不需要启动,所以不需要主启动类,也不需要配置文件,可以把多余的东西删除,如下图:

 

(6)一个业务场景是这样的:比如有一个业务方法是<给别人打招呼>,其使用场景是你给我传入一个姓名,我给你输出一句问候语,并且这个问候语的格式是<可配置的前缀>+传入的姓名+<可配置的后缀>。

        这个业务方法经常被使用,被多个模块使用,那么我就可以把这个业务方法抽取出来 。如下所示:

(7)在自动配置类的resource下创建 META-INF/spring.factories文件,在此文件中配置EnableAutoConfiguration 的值,这个值指定的就是需要在SpringBoot项目启动时自动加载的配置类(当然这个配置类生效与否还要看其是否满足自动配置类的条件),如下:

(8)打包项目并安装到本地仓库中

       因为场景启动器要依赖自动配置包,所以要先打包自动配置包,再打包场景启动器;如下图:

 

 

 至此就成功开发了自己的场景启动器,那么如何在其它项目中进行使用呢?接着看:

(8)新建一个测试项目,在其pom文件引入自定义的场景启动器,如下:

(9)直接编写业务方法,进行使用,如下:

 

(10)进行测试:

 

(11) 其它一些想法:

  • 可以给HelloProperties的属性给定一些默认值,当其它项目使用我们的场景启动器(自定义starter时)如果没有在配置文件进行配置值,就使用我们默认给定的值;
  • 条件装配(比如我们的自动配置类在给容器中添加组件时需要经过一些条件判断,当满足某种条件时才给容器中放入某个组件)
  • ... 

三、以mybatis-spring-boot-starter为例进行分析

1. 写好自己的自动配置类逻辑

说明:自动配置类里面需要的属性信息和xxxProperties类进行绑定

(1)自定义一个项目,artifactId叫做 <mybatis-spring-boot-autoconfigure>,如下图:

2. 创建自己的starter项目并引入自动配置类项目的依赖

(2)自定义一个项目,artifactId叫做xxx-spring-boot-starter (比如mybatis-spring-boot-starter)

(3)(2)中引入(1)的依赖【即starter的pom文件里面引入autoconfigure包】,如下图:

3. 在其它项目中使用自定义的starter

(4)在其它项目中使用自定义的Starter,就是引入(2)的依赖,然后在自己的配置文件中配置需要和xxxProperties绑定的配置信息,这样就可以在自己的项目中使用自定义的starter了。 

 

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

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

相关文章

Spring MVC学习随笔-文件下载和上传(配置文件上传解析器multipartResolver)

学习视频&#xff1a;孙哥说SpringMVC&#xff1a;结合Thymeleaf&#xff0c;重塑你的MVC世界&#xff01;&#xff5c;前所未有的Web开发探索之旅 学习视频&#xff1a;【编程不良人】继spring之后快速入门springmvc,面对SpringMVC不用慌 六、SpringMVC 文件上传下载 6.1 文件…

【算法】单调队列 滑动窗口最大值

文章目录 例题——239. 滑动窗口最大值相关练习1438. 绝对差不超过限制的最长连续子数组解法1——两个单调队列分别维护最大值和最小值解法2——有序集合TreeMap 2398. 预算内的最多机器人数目解法1——二分答案 单调队列解法2——双指针 单调队列 &#xff08;不固定大小的滑…

使用docker切换任意版本cuda使用GPU

1.现存问题 在主机上运行很多下载来的机器学习代码时&#xff0c;这些大都运行在不同版本的tensorflow-gpu或者pytorch等的包下的。但是&#xff0c;运行代码的过程中&#xff0c;存在匹配的问题&#xff1a; 1.不同的版本的tensorflow-gpu或pytorch对cuda版本的适配也不一样…

Day49力扣打卡

打卡记录 需要添加的硬币的最小数量&#xff08;归纳法&#xff09; 链接 按着已经加入的数&#xff0c;以此偏移对应距离&#xff0c;从而得到新的连续数&#xff0c;若是出现断层则计入最小次数中&#xff0c;再以此偏移对应距离。 class Solution:def minimumAddedCoins(s…

H3C交换机堆叠配置(四台交换机配置堆叠)

最近需要扩大公司新项目环境&#xff0c;新买够了&#xff0c;四台二层交换机和两台三层交换机&#xff0c;二层交换机型号为H3C S5120&#xff0c;三层交换机为H3C S5500&#xff0c;因为项目有关于国家项目&#xff0c;必须使用国产网络设备&#xff0c;现在需要对四台交换机…

Python---函数递归---练习:使用递归求N的阶乘(如n=100)(本文以递归算法 解法为主)

相关链接&#xff1a;Python---函数递归---练习&#xff1a;斐波那契数列&#xff08;本文以递归算法为主&#xff09;-CSDN博客 Python---if选择判断结构、嵌套结构&#xff08;if elif else&#xff09;_python多重if嵌套-CSDN博客 案例&#xff1a;使用递归求N的阶乘&…

基于springboot + vue体育馆使用预约平台

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

Google Earth Engine谷歌地球引擎计算多年中某两个时间点之间遥感数据差值的平均值

本文介绍在谷歌地球引擎GEE中&#xff0c;提取、计算某一种遥感影像产品在连续的多年中&#xff0c;2个不同时相的数据差值的多年平均值&#xff0c;并将计算得到的这一景差值的结果图像导出的方法。 本文是谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#x…

机器学习-回归问题(Regression)

前言 与KNN分类任务预测的输出为离散型不同. 在机器学习中&#xff0c;回归任务是用于预测连续数值型变量的任务。回归任务在很多领域都有着广泛的应用. 回归问题求解 在一个回归问题中&#xff0c;很显然模型选择和好坏会直接关系到将来预测结果的接近程度&#xff0c;举个…

RPG项目01_新输入输出

基于“RPG项目01_脚本代码”&#xff0c;本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;如果一直跟着做教学项目&#xff0c;请先保存项目&#xff0c;再继续修改unity为新输入输出系统。 向下翻&#xff0c; 向下翻&#xff0c; 选择both加入新输入输出系…

疫苗接种(链表练习)

很明显&#xff0c;数组也可以做&#xff0c;但是我想练习链表 这道题我上交的时候&#xff0c;同一份代码&#xff0c;三个编译器&#xff0c;三个成绩&#xff0c;有点搞心态 代码如下&#xff1a; #include<stdio.h> #include<math.h> #include<stdlib.h&…

html动漫网页设计分享 紫罗兰永恒花园网页作业成品带视频,注册登录,表格,表单

html5静态网页设计要是用HTML DIVCSS JS等来完成页面的排版设计,一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点&#xff0c;学生网页作业源码可以…

重新认识Word——样式

重新认识Word Word样式给所有一级标题加上一级标题样式修改标题一样式&#xff0c;符合要求 正文样式标题前的小黑点导航窗格样式的相互复制Word一键转PPT 话说回来&#xff0c;一个程序员平时可能还看不起office全家桶的软件&#xff0c;但是&#xff0c;在实际的生活运用中&a…

Elk-filebeat

前言 Elk&#xff1a;filebeat搜集日志工具和logstash相同 Filebeat是一个轻量级的日志收集工具&#xff0c;所使用的资源比logstash部署和启动时使用的资源更小 Filebeat可以运行在非Java环境&#xff0c;他可以代理logstash在非Java环境上收集日志 Filebeat无法实现数据的…

设计基于STM32的温度传感器实时数据采集和显示系统

温度传感器作为常见的传感器之一&#xff0c;被广泛应用于各种领域&#xff0c;如工业自动化、家电控制等。为了实时监测和控制温度&#xff0c;设计一个基于STM32的温度传感器实时数据采集和显示系统是很有必要的。本文将详细介绍如何设计这样一个系统&#xff0c;并提供相应的…

[蓝桥杯 2020 省 AB1] 解码

做题前思路&#xff1a; 1.因为是多组输入&#xff0c;又包含字符于是我们可以先定义一个char类型数组arr 2.定义数组的长度&#xff1a;题目说简写&#xff08;字母加数字&#xff09;长度不超过100&#xff0c;但原来的长度可能超过100&#xff0c;加上小明不会将连续超过9…

英飞凌(Infineon)TC397链接文件解析

本篇文章首先介绍了链接文件在整个代码编译过程中所起到的作用&#xff0c;然后根据TC397芯片对应的链接文件涉及的链接命令&#xff0c;参照官网的示例给出了常见的使用方法&#xff0c;最后分为MEMORY与SECTIONS两个部分以脚本命令走读的形式解析了TC397芯片的链接文件&#…

5_企业架构LNMP高可用负载均衡服务器

企业架构LNMP高可用负载均衡服务器之Nginx 学习目标和内容 1、能够描述负载均衡的作用 2、能够了解负载均衡常见实现方式 3、能够使用Nginx实现负载均衡 4、能够描述Nginx的常见负载均衡算法 一、背景描述及其方案设计 1、业务背景描述 时间&#xff1a;2011.6.-2013.9 发布产…

谈一谈内存对齐

文章目录 一&#xff0c;什么是内存对齐&#xff1f;二&#xff0c;为什么要有内存对齐&#xff1f;三&#xff0c;内存对齐规则&#xff1f; 一&#xff0c;什么是内存对齐&#xff1f; 现代计算机中的内存空间都是按字节划分的&#xff0c;理论上似乎我们对任何类型变量的访…

【iOS控件】—— UIPickerView的使用

【iOS控件】—— UIPickerView的使用 一. 简述UIPickerView1. 什么是UIPickerView2. UIPickerView遵守的协议 二. 测试Demo三. 总结 一. 简述UIPickerView 先看一下UIPickerView的效果图&#xff1a; 1. 什么是UIPickerView UIPickerView是iOS平台上的一个用户界面元素&am…