SpringBoot之自定义Starter

目录

一、自己的理解

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了。 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何开启Windows Server 2016 远端桌面

使用GUI 设定 服务器管理器–> 本地服务器–> 远端桌面 启用远端桌面 远端–> 允许远端连线至此电脑 会提示防火墙设定跟电源设定 防火墙之前已经关闭了 完成

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

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

nodejs微信小程序+python+PHP健身房信息管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Gitee拉取代码报错You hasn‘t joined this enterprise! fatal unable to access

文章目录 一、问题二、解决2.1、进入**控制面板**2.2、进入**用户账户**2.3、进入**管理Windows凭据**2.4、**普通凭据**2.4.1、添加2.4.2、编辑 2.5、重新拉取|推送代码 三、最后 一、问题 Gitee拉取仓库代码的时候报错You hasnt joined this enterprise! fatal unable to ac…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询&#xff1a; 语法&#xff1a; 2、range查询&#xff1a;&#xff08;范围查询&#xff09; 语法&#xff1a; 三、地理查询 1、geo_bou…

SSM新闻发布管理系统

SSM毕设分享 序号1&#xff1a;SSM新闻发布管理系统 1 项目简介 Hi&#xff0c;各位同学好&#xff0c;这里是郑师兄&#xff01; 今天向大家分享一个毕业设计项目作品【SSM新闻发布管理系统】 师兄根据实现的难度和等级对项目进行评分(最低0分&#xff0c;满分5分) 难度系数…

【算法】单调栈题单——矩阵系列⭐

文章目录 题目列表84. 柱状图中最大的矩形&#xff08;单调栈找左右两边第一个更低的位置&#xff09;85. 最大矩形⭐⭐⭐⭐⭐解法1——使用柱状图的优化暴力方法解法2——单调栈 &#xff1a;归因到 84. 柱状图中最大的矩形 &#x1f402; 1504. 统计全 1 子矩形⭐解法1——枚…

Java 不要在父类的构造方法里面调用可以被子类重写的方法

不要在父类的构造方法(代码块)里面调用可以被子类重写的方法 我们从第一天学习Java开始&#xff0c;就对Java的类初始化顺序牢记于心。但是在实际开发过程中&#xff0c;似乎很难能接触这一部分的应用。在这之前&#xff0c;我也认为它只是面试中八股文而已&#xff0c;直到最…

The Big IAM Challenge 云安全 CTF 挑战赛

The Big IAM Challenge 云安全 CTF 挑战赛 今天&#xff0c;我们来做一下有关于云安全 的CTF 挑战赛 The Big IAM Challenge,旨在让白帽子识别和利用 IAM错误配置&#xff0c;并从现实场景中学习&#xff0c;从而更好的认识和了解IAM相关的风险。比赛包括6个场景&#xff0c;每…

Zotero 安装及常用插件设置指南

Zotero 安装及常用插件设置指南 本指南旨在帮助用户安装并配置 Zotero。通过本教程&#xff0c;您将能够实现以下功能&#xff1a; 界面语言设置为中文使用颜色标签来区分不同阅读状态的文献重要文献标记显示影响因子、JCP和中科院分区翻译插件Sci-Hub 集成 安装和设置步骤…

leetCode 90.子集 II + 回溯算法 + 图解 + 笔记

给你一个整数数组 nums &#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 排列 示例 1&#xff1a; 输入&#xff1a;nums [1,2,2] 输出…

基于CNN对彩色图像数据集CIFAR-10实现图像分类--keras框架实现

项目地址&#xff08;kaggle&#xff09;&#xff1a;基于CNN对彩色图像数据集CIFAR-10实现图像分类--keras | Kaggle 项目地址&#xff08;Colab&#xff09;&#xff1a;https://colab.research.google.com/drive/1gjzglPBfQKuhfyT3RlltCLUPgfccT_G9 导入依赖 在tensorflow…

第一百八十八回 分享三个使用TextField的细节

文章目录 1. 概念介绍2. 使用方法2.1 修改组件的填充颜色2.2 修改组件的高度2.3 给组件添加圆角3. 示例代码4. 内容总结我们在上一章回中介绍了"DropdownButton组件"相关的内容,本章回中将介绍**TextField组件的细节.**闲话休提,让我们一起Talk Flutter吧。 1. 概念…

EasyRecovery易恢复2024最新免费版电脑数据恢复软件功能介绍

EasyRecovery从&#xff08;易恢复2024&#xff09;支持恢复不同存储介质数据&#xff0c;在Windows中恢复受损和删除文件,以及能检索数据格式化或损坏卷&#xff0c;甚至还可以从初始化磁盘。同时&#xff0c;你只需要最简单的操作就可以恢复数据文件&#xff0c;如&#xff1…

YITH Product Shipping for WooCommerce商城产品配送运输插件

点击访问原文 YITH Product Shipping for WooCommerce商城产品配送运输插件 - 易服客工作室 YITH Product Shipping for WooCommerce商城产品配送运输插件根据商店的每个产品处理不同的运费&#xff0c;例如您可以为每个州、地区或城市设置不同的费用。 根据店铺的单品处理不…

搭建 ebpf 开发测试环境

0 内容说明 这部分主要讲述了如何通过官网学习ebpf&#xff0c;以及如何搭建自己的ebpf开发测试环境&#xff0c;主要是需要安装哪些工具链。 1 ebpf在线学习 ebpf官网中提供了一个快速在线学习ebpf的路径&#xff0c;在这个学习平台中一共有两项学习内容&#xff0c;一个是…

在Spring Boot中隔离@Async异步任务的线程池

在异步任务执行的时候&#xff0c;我们知道其背后都有一个线程池来执行任务&#xff0c;但是为了控制异步任务的并发不影响到应用的正常运作&#xff0c;我们需要对线程池做好相关的配置&#xff0c;以防资源过度使用。这个时候我们就考虑将线程池进行隔离了。 那么我们为啥要…

高校人员信息管理系统C++

代码&#xff1a;https://mbd.pub/o/bread/ZZeZk5lx 一、基本内容论述 1、问题描述 某高校有四类员工&#xff1a;教师、实验员、行政人员、教师兼行政人员&#xff1b;共有的信息包括&#xff1a;编号、姓名、性别、年龄等。其中&#xff0c;教师还包含的信息有&#xff1a;所…

2023年GopherChina大会-核心PPT资料下载

一、峰会简介 自 Go 语言诞生以来&#xff0c;中国便是其应用最早和最广的国家之一&#xff0c;根据 Jetbrains 在 2021 年初做的调查报告&#xff0c;总体来说目前大概有 110 万专业的开发者 选择 Go 作为其主要开发语言。就其全球分布而言, 居住在亚洲的开发者最多&#xff…

矩阵元素求和:按行、按列、所有元素np.einsum()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 矩阵元素求和&#xff1a; 按行、按列、所有元素 np.einsum() [太阳]选择题 下列说法正确的是&#xff1a; import numpy as np A np.array([[1, 2],[3, 4]]) print("【显示】A") p…