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.mzph.cn/news/222918.shtml

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

相关文章

计算机操作系统-第十六天

目录 线程的实现方式 用户级线程 内核级线程 多线程模型 一对一模型 多对多模型 多对多模型 本节思维导图 线程的实现方式 用户级线程 历史背景&#xff1a;早期操作系统只支持进程&#xff0c;不支持线程&#xff0c;当时的线程是由线程库实现的 本质&#xff1a;从…

【普中】基于51单片机简易计算器显示设计( proteus仿真+程序+设计报告+实物演示+讲解视频)

目录标题 &#x1f4df;1. 主要功能&#xff1a;&#x1f4df;2. 讲解视频&#xff1a;&#x1f4df;3. 设计说明书(报告)&#x1f4df;4. 仿真&#x1f4df;5. 实物烧录和现象&#x1f4df;6. 程序代码&#x1f4df;7. 设计资料内容清单 【普中开发板】基于51单片机简易计算器…

processon使用及流程图和泳道图的绘画(登录界面流程图,门诊流程图绘制门诊泳道图,住院泳道图,OA会议泳道图),Axure自定义元件

目录 一.processon图形的使用场景介绍 二.流程图绘画 三.泳道图的绘画 1.绘制门诊流程图绘制门诊泳道图 2. 绘制住院泳道图​编辑 3.绘制药库采购入库流程图 4.绘制OA会议泳道图 四.Axure自定义元件 1.Axure载入元件库 一.processon图形的使用场景介绍 二.流程图绘画 示例&…

鸿蒙开发组件之Web

一、加载一个url myWebController: WebviewController new webview.WebviewControllerbuild() {Column() {Web({src: https://www.baidu.com,controller: this.myWebController})}.width(100%).height(100%)} 二、注意点 2.1 不能用Previewer预览 Web这个组件不能使用预览…

《PCL多线程加速处理》-配准-icp

《PCL多线程加速处理》-配准-icp 一、效果展示二、具体实现三、代码一、效果展示 数据越大,速度提升效果越快 1、48万点 2、十万点 3、三万点 4、9000点 配准数据 二、具体实现

构建智能外卖跑腿小程序:技术实践与代码示例

在快节奏的现代生活中&#xff0c;外卖跑腿服务已成为人们日常生活中不可或缺的一部分。为了提供更智能、高效的外卖跑腿体验&#xff0c;本文将深入探讨构建一款智能外卖跑腿小程序所需的关键技术&#xff0c;并提供相应的代码示例。 1. 地理位置服务的整合 外卖跑腿小程序…

小程序 -网络请求post/get

1.1网络请求的概念(post和get) 1.2步骤 1.3 应用函数 js里面写&#xff0c;用bindtap绑在控件上&#xff0c;就不讲了 实例代码&#xff1a; //发起get数据请求get_info(){wx.request({url:https://www.escook.cn/api/get,//请求的接口地址,必须基于https协议//请求的方式met…

SpringBoot项目打成War包部署

简介 一般情况下&#xff0c;在SpringBoot项目开发完成进行服务器部署时&#xff0c;都是打成JAR包进行部署运行的。但是在有些情况下也需要将其打成War包使用Tomcat进行部署。本篇文章就简单介绍一下SpringBoot如何打成War包。 注意&#xff1a; 测试Demo的SpringBoot版本为2…

python selenium chrome114版本之后环境配置和携带缓存打开chrome

尽力局 chrome驱动环境配置chrome打开带缓存设置待缓存打开自动关闭浏览器自动关闭浏览器弹窗 最终代码找资料难啊最终效果代码 依赖包和生成依赖包方法关闭谷歌升级 chrome驱动环境配置 网上找到的资料&#xff0c;我现在安装的是120版本的&#xff0c;这个资料是可行的。比较…

对局域网络中应用了网络变压器 POE供电功能的供电端设备间的连接方法

Hqst华轩盛(石门盈盛)电子导读&#xff1a;一起来了解局域网络中应用了网络变压器 POE供电功能的设备间的来连接方法 POE标准为使用以太网的传输电缆输送直流电到POE兼容的设备定义了两种连接方法: 第一,中间跨接法 一种称作"中间跨接法"( Mid -Span ),使用独立的PoE…

【Pytorch】学习记录分享3——PyTorch 自动微分与线性回归

【【Pytorch】学习记录分享3——PyTorch 自动微分与线性回归 1. autograd 包&#xff0c;自动微分2. 线性模型回归演示3. GPU进行模型训练 小结&#xff1a;只需要将前向传播设置好&#xff0c;调用反向传播接口&#xff0c;即可实现反向传播的链式求导 1. autograd 包&#x…

jmeter,取“临时重定向的登录接口”响应头中的cookie

1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 首先理解 自动重定向 与跟随…

智能优化算法应用:基于黏菌算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黏菌算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黏菌算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黏菌算法4.实验参数设定5.算法结果6.参考文献7.MA…

拦截器实现指定的IP白名单进行访问规定的Controller

需求&#xff1a;只允许内网的IP&#xff08;也就是IP白名单&#xff09;进行访问VideoController和ImgController&#xff0c;其余的FontController可以随便访问不做限制 总体的项目结构&#xff1a; 1、先写好业务代码三个Controller 访问的路径分别是&#xff1a; /api/…

android studio 快捷输入模板提示

在Android开发中&#xff0c;我们经常会遇到一些重复性的代码&#xff0c;例如创建一个新的Activity、定义一个Getter方法等。为了提高开发效率&#xff0c;Android Studio提供了Live Templates功能&#xff0c;可以通过简化输入来快速生成这些重复性代码。 按下图提示设置&am…

机器人制作开源方案 | 智能助老机器人

作者&#xff1a;刘颖、王浩宇、党玉娟 单位&#xff1a;北京科技大学 指导老师&#xff1a;刘新洋、栗琳 1. 项目背景 1.1 行业背景 随着越来越多的服务机器人进入家庭&#xff0c;应用场景呈现多元化和专业化&#xff0c;机器人产业生态体系正在不断完善&#xff0c;服务…

PyGame字体详解

文章目录 字体初始化获取字体字体对象内置方法 字体初始化 在pygame程序中&#xff0c;第一步势必进行初始化&#xff0c;即调用pygame.init()函数&#xff0c;而此初始化过程&#xff0c;则顺便包含了字体初始化&#xff0c;即默不作声地调用了pygame.font.init()函数。下面通…

安卓开发显示加载中

private ProgressDialog loadobj; // 显示 ProgressDialog loadobj loadobj.show(MainActivity.this, "正在加载", "请稍后..."); // 取消 ProgressDialog loadobj.dismiss();或者 public ProgressDialog progressDialog;public void loading(){// …

从计算机底层深入Golang高并发

从计算机底层深入Golang高并发 1.源码流程架构图 2.源码解读 runtime/proc.go下的newpro() func newproc(fn *funcval) {//计算额外参数的地址argpgp : getg()pc : getcallerpc()//s1使用systemstack调用newproc1 systemstack(func() {newg : newproc1(fn, gp, pc)_p_ : getg…

Tekton 基于 cronjob 触发流水线

Tekton 基于 cronjob 触发流水线 Tekton EventListener 在8080端口监听事件&#xff0c;kubernetes 原生 cronjob 定时通过curl 命令向 EventListener 发送事件请求&#xff0c;触发tekton流水线执行&#xff0c;实现定时运行tekton pipeline任务。 前置要求&#xff1a; kub…