Spring Boot之自定义starter

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于Spring Boot的相关操作吧 

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一. starter是什么

二.为什么要使用starter

三.怎么自定义starter【附自定义starter的案例制作】

1.创建Starter项目(spring-initializr)

2.定义Starter需要的配置类(Properties)

3.编写Starter项目的业务功能

4.编写自动配置类

5.编写spring.factories文件加载自动配置类

6.打包安装

7.其它项目引用

四.自定义starter运用到的注解


一. starter是什么

  SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰

所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念

二.为什么要使用starter

         使用starter的主要目的是简化应用程序的开发和配置过程。通常,一个应用程序需要包含许多组件和配置,如数据库连接、安全认证、日志记录等。使用starter可以将这些组件和配置预先打包为一个可重用的模块,使得开发者能够更快速地启动一个基本的应用程序   

         在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,我们经常将其放到一个特定的包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一遍,麻烦至极。如果我们将这些可独立于业务代码之外的功能配置模块封装成一个个starter,复用的时候只需要将其在pom中引用依赖即可, SpringBoot为我们完成自动装配,简直不要太爽。

三.怎么自定义starter【附自定义starter的案例制作】

1.创建Starter项目(spring-initializr)

​​​​​​​

2.定义Starter需要的配置类(Properties)

package com.wh.mysmsspringbootstarter.properties;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** 短信服务配置类*/@Data@ConfigurationProperties(prefix="mysms")
public class SmsProperties {//    @Value("${mysms.keys}")private String keys;//访问ID、即帐号
//    @Value("${mysms.secret}")private String secret;//访问凭证,即密码}

3.编写Starter项目的业务功能

package com.wh.mysmsspringbootstarter.service;public interface ISmsService {/*** 发送短信** @param phone        要发送的手机号* @param data         要发送的内容*/void send(String phone, String data);}
package com.wh.mysmsspringbootstarter.service;import com.wh.mysmsspringbootstarter.properties.SmsProperties;
import org.springframework.stereotype.Service;public class SmsServiceImpl implements ISmsService {private SmsProperties smsProperties; //nullpublic SmsServiceImpl(SmsProperties smsProperties) {this.smsProperties=smsProperties;}@Overridepublic void send(String phone, String data) {String key = smsProperties.getKeys();String secret = smsProperties.getSecret();//System.out.println("接入短信系统,Keys=" + key + ",Secret=" + secret);System.out.println("短信发送,phone=" + phone + "data=" + data);}}

4.编写自动配置类

在此去控制service是否会被加到spring中,所以就不能够使用spring的自动装配了,而是要手动去装配,在这里是先拿到配置类,然后在下面写一个方法去控制service导入spring

并且配置类也不能够交给spring自动装配了

然后需要去将配置类注入到spring,这样子的话,只要配置类和service就是一个捆绑的关系了(配置类注入spring时,service也会注入到spring中)

使用属性去控制是否使用功能(是否注入配置类以及service到spring中)

5.编写spring.factories文件加载自动配置类

注意:其中AutoConfig是starter配置文件的类限定名,多个之间逗号分割,还可以\进行转义即相当于去掉后面换行和空格符号

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.wh.mysmsspringbootstarter.config.SmsConfig

6.打包安装

我们也可以检查一下是否安装完毕

7.其它项目引用

①引入pom依赖

 <!--自定义stater--><dependency><groupId>com.wh</groupId><artifactId>mysms-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

②yml配置

🔺如果在其他项目中引用的时候,出现了下面的这种情况(框住的是当时报红的,也意味着用不了这个启动类),那么就在启动类的pom中引入一个插件

<!--自定义starter--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin>

测试类

package com.wh.springboot;import com.wh.mysmsspringbootstarter.properties.SmsProperties;
import com.wh.mysmsspringbootstarter.service.SmsServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(classes = SpringbootApplication.class)
class SpringbootApplicationTests {@Autowiredprivate SmsProperties smsProperties;@Testvoid contextLoads() {new SmsServiceImpl(smsProperties).send("17377865455","么么哒");}}

四.自定义starter运用到的注解

  1. @SpringBootApplication这是一个组合注解,包括了 @Configuration@EnableAutoConfiguration@ComponentScan。这个注解通常在引导类(如 Application)上使用。

  2. @EnableAutoConfiguration启用自动配置机制。这个注解可以让 Spring Boot 根据项目的依赖和配置来自动配置应用程序。

  3. @ConfigurationProperties将属性绑定到特定的 Java 类中。这个注解通常用于将应用程序的自定义配置绑定到一个 POJO 中。

  4. @ConditionalOnClass当给定的类在类路径上存在时,才实例化一个 Bean。这个注解可用于根据特定的条件来控制 Bean 的创建。

  5. @ConditionalOnMissingBean当给定的 Bean 不存在时,才实例化一个 Bean。这个注解可用于根据特定的条件来控制 Bean 的创建。

  6. @ConditionalOnProperty当指定的属性存在并且具有指定的值时,才实例化一个 Bean。这个注解可用于根据特定的属性值来控制 Bean 的创建。

  7. @Autowired自动装配一个 Bean,并将它注入到另一个 Bean 中。

  8. @Component将一个普通的 Java 类声明为 Spring Bean。

  9. @RestController将一个 Java 类声明为 Web 控制器,用于处理 HTTP 请求。

  10. @RequestMapping将一个方法映射到一个特定的 URL,并指定请求方法(如 GET、POST 等

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

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

相关文章

大模型应用_PrivateGPT

https://github.com/imartinez/privateGPT 1 功能 整体功能&#xff0c;想解决什么问题 搭建完整的 RAG 系统&#xff0c;与 FastGPT相比&#xff0c;界面比较简单。但是底层支持比较丰富&#xff0c;可用于知识库的完全本地部署&#xff0c;包含大模型和向量库。适用于保密级…

SWPU NSS新生赛

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白&#xff0c;正在自学ing。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐️。 ⭐️此后如竟没有炬火&#xff0c;我便是唯一的光。⭐️ 最近…

万界星空科技AI低代码云MES系统

在企业生产管理过程中&#xff0c;从市场、生产现场到产品交付&#xff0c;生产制造行业都面临着诸多挑战&#xff0c;比如&#xff1a; 订单排产难度大&#xff1a;订单混乱&#xff0c;常漏排产、错排产&#xff1b;产能不明晰&#xff0c;无法承诺交期&#xff0c;常丢单&a…

流程控制之条件判断

目录 流程控制之条件判断 2.1.if语句语法 2.1.1单分支结构 2.1.2双分支结构 2.1.3多分支结构 2.2.案例 例一: 例2: 例3: 例4: 例5: 例6: 例7: 例8: 例9: 2.3.case多条件判断 2.3.1.格式 2.3.2.执行过程 例10: 流程控制之条件判断 2.1.if语句语法 2.1.1单分…

ArcGIS for Android开发引入arcgis100.15.2

最后再点击同步即可&#xff01;&#xff01;&#xff01;

oracle aq java jms使用(数据类型为XMLTYPE)

记录一次冷门技术oracle aq的使用 版本 oracle 11g 创建用户 -- 创建用户 create user testaq identified by 123456; grant connect, resource to testaq;-- 创建aq所需要的权限 grant execute on dbms_aq to testaq; grant execute on dbms_aqadm to testaq; begindbms_a…

基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程

招投标管理系统是一款适用于招标代理、政府采购、企业采购和工程交易等领域的企业级应用平台。该平台以项目为主线&#xff0c;从项目立项到项目归档&#xff0c;实现了全流程的高效沟通和协作。通过该平台&#xff0c;用户可以实时共享项目数据信息&#xff0c;实现规范化管理…

【数据结构入门精讲 | 第一篇】打开数据结构之门

数据结构与算法是计算机科学中的核心概念&#xff0c;也与现实生活如算法岗息息相关。鉴于全网数据结构文章良莠不齐且集成度不高&#xff0c;故开设本专栏&#xff0c;为初学者提供指引。 目录 基本概念数据结构为何面世算法基本数据类型抽象数据类型使用抽象数据类型的好处 数…

微信小程序:模态框(弹窗)的实现

效果 wxml <!--新增&#xff08;点击按钮&#xff09;--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…

消息队列(MQ)

对于 MQ 来说&#xff0c;不管是 RocketMQ、Kafka 还是其他消息队列&#xff0c;它们的本质都是&#xff1a;一发一存一消费。下面我们以这个本质作为根&#xff0c;一起由浅入深地聊聊 MQ。 01 从 MQ 的本质说起 将 MQ 掰开了揉碎了来看&#xff0c;都是「一发一存一消费」&…

java实现冒泡排序及其动图演示

冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。重复这个过程直到整个数列都是按照从小到大的顺序排列。 具体步骤如下&#xff1a; 比较相邻的两个元素&#xff0c;如果前…

世界5G大会

会议名称:世界 5G 大会 时间:2023 年 12 月 5 日-12 月 8 日 地点:河南郑州 一、会议简介 世界 5G 大会,是由国务院批准,国家发展改革委、科技部、工 信部与地方政府共同主办,未来移动通信论坛联合属地主管厅局联合 承办,邀请全球友好伙伴共同打造的全球首个 5G 领域…

Spring Boot 3 整合 WebSocket (STOMP协议) 和 Vue 3 实现实时通信

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

家政服务小程序预约上门,让服务更便捷

随着人们生活节奏的加快&#xff0c;家政服务行业越来越受到人们的欢迎。为了满足市场需求&#xff0c;提高服务质量&#xff0c;家政公司需要开发一款预约上门的家政服务小程序。本文将详细介绍如何制作一个预约上门的家政服务小程序。 一、登录乔拓云网后台 首先&#xff0c…

基于vue实现的疫情数据可视化分析及预测系统-计算机毕业设计推荐django

目 录 摘 要 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;…

Appium自动化常用adb操作封装

一、前置说明 在Appium自动化中&#xff0c;经常需要使用adb命令与设备进行交互&#xff0c;所以有必要把常用的adb操作封装成一个类 二、代码实现 import os import platform import re import subprocessfrom common import path from common.exception import AndroidSDK…

语音识别功能测试:90%问题,可以通过技术解决

现在市面上的智能电子产品千千万&#xff0c;为了达到人们使用更加方便的目的&#xff0c;很多智能产品都开发了语音识别功能&#xff0c;用来语音唤醒进行交互&#xff1b;另外&#xff0c;各大公司也开发出来了各种智能语音机器人&#xff0c;比如小米公司的“小爱”&#xf…

DHCP—动态主机配置协议

动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是RFC 1541&#xff08;已被RFC 2131取代&#xff09;定义的标准协议&#xff0c;该协议允许服务器向客户端动态分配IP地址和配置信息。 DHCP协议支持C/S&#x…

外汇天眼:Coinbase国际交易所将启动现货市场

Coinbase宣布了Coinbase国际交易所扩张的下一阶段——退出符合条件客户的非美国现货市场。 这一最新发展旨在满足Coinbase全球用户群体的独特需求和需求&#xff0c;同时强化其扩大国际访问可信产品和服务的战略使命。 Coinbase国际交易所现货交易的推出和扩展将分阶段进行。1…

vite+vue3+electron搭建项目

编辑器使用vscode&#xff0c;打开一个空文件夹 第一步 初始化vite项目 初始化vite项目&#xff0c;命令 npm init vite 第二步 下载依赖 进入新建的项目&#xff0c;下载依赖&#xff0c;命令 cd vite-projec npm i第三步 使用cnpm下载 electron依赖 新建一个终端&#…