Springboot3自定义starter笔记

场景:抽取聊天机器人场景,它可以打招呼。 效果:任何项目导入此 starter
都具有打招呼功能,并且问候语中的人名需要可以在配置文件中修改。

  1. 创建自定义 starter 项目,引入 spring-boot-starter 基础依赖。
    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
  1. 编写模块功能,引入模块所有需要的依赖。
  2. 编写 xxxAutoConfiguration 自动配置类,帮其他项目导入这个模块需要的所有组件。
  3. 编写配置文件 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports指定启动需要加载的自动配置。
  4. 其他项目引入即可使用

业务代码

在这里插入图片描述

@Service
public class RobotService {@AutowiredRobotProperties robotProperties;public String sayHello(){return "hello"+robotProperties.getName()+":"+robotProperties.getAge()+"邮箱"+robotProperties.getEmail();}
}

写下面代码为了进行属性绑定,配置文件(application.properties)配了什么属性项这个类里面都可以直接进行绑定关联(在配置文件中写的数据通过这个配置文件,在业务代码中引入RobotProperties robotProperties并进行自动注入,就会通过这个来获取配置文件中的属性)

@ConfigurationProperties(prefix = "robot")
@Component
@Data
public class RobotProperties {private String name;private String age;private String email;
}
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

在这里插入图片描述

基本抽取

  1. 创建starter项⽬,把公共代码需要的所有依赖导⼊ 把公共代码复制进来
    在这里插入图片描述
    不选场景
    在这里插入图片描述
    在这里插入图片描述
    引入需要的web包

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
    </dependency>
    

删除主程序类
在这里插入图片描述
在新项目中导入该starter
在这里插入图片描述

  1. ⾃⼰写⼀个 RobotAutoConfiguration ,给容器中导⼊这个场景需要的所有组件
    为什么这些组件默认不会扫描进去?
    starter所在的包和 引⼊它的项⽬的主程序所在的包不是⽗⼦层级
    在这里插入图片描述
    在这里插入图片描述
  2. 别⼈引⽤这个 starter ,直接导⼊这个 RobotAutoConfiguration ,就能把这个场景的组件导⼊进来

使用@EnableXxx机制

在这里插入图片描述

完全自动配置

  1. 依赖SpringBoot的SPI机制
  2. META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    ⽂件中编写好我们⾃动配置类的全类名即可
  3. 项⽬启动,⾃动加载我们的⾃动配置类
    在这里插入图片描述

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

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

相关文章

Nginx与Tomcat负载均衡集群配置指南

目录 一、资源清单 二、基础环境 三、安装配置Tomcat 四、安装配置Nginx 一、资源清单 主机 操作系统 IP地址 tomcat1 OpenEuler24.03 192.168.16.142 tomcat2 OpenEuler24.03 192.168.16.143 Nginx OpenEuler24.03 192.168.16.144 二、基础环境 hostnamectl …

【数据处理】xarray 数据处理教程:从入门到精通

目录 xarray 数据处理教程&#xff1a;从入门到精通一、简介**核心优势** 二、安装与导入1. 安装2. 导入库 三、数据结构&#xff08;一&#xff09;DataArray&#xff08;二&#xff09; Dataset&#xff08;三&#xff09;关键说明 四、数据操作&#xff08;一&#xff09;索…

网站漏洞存在哪些危害,该如何做好预防?

网站漏洞的危害及预防措施 一、网站漏洞的主要危害 网站漏洞是攻击者利用系统、应用或配置中的缺陷&#xff0c;实施恶意行为的入口。其危害包括但不限于以下方面&#xff1a; 数据泄露与隐私侵犯 危害&#xff1a;攻击者通过SQL注入、XSS等漏洞窃取用户数据&#xff08;如密…

WEB攻防-PHP漏洞解析

Web攻防之PHP漏洞解析 目录结构 引言 1.1 PHP在CTF Web方向的核心地位1.2 报告目标与结构说明1.3 PHP安全研究的方法论代码执行漏洞 2.1 漏洞原理与历史演进2.2 危险函数全解析与利用链2.3 绕过过滤的20种高级技巧2.4 实战案例&#xff1a;从CVE到CTF赛题复现2.5 防御方案与安…

YOLO11解决方案之距离计算探索

概述 Ultralytics提供了一系列的解决方案&#xff0c;利用YOLO11解决现实世界的问题&#xff0c;包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 测量两个物体之间的间距被称为特定空间内的距离计算&#xff0c;YOLO11使用两个边界框的中心…

mongodb处理时区转换问题

1. 程序查询直接使用&#xff08;java&#xff09;Date即可, 因为直接支持 2. 若方便查看日期需要进行格式和时区转换 db.task.aggregate([{ $match: {userId: 113633}},{ $project: {userId: 1,endTime: 1,formattedDate: {$dateToString: {format: "%Y-%m-%d %H:%M:%S&…

基于中心点预测的视觉评估与可视化流程

基于中心点预测的视觉评估与可视化流程 基于中心点预测的视觉评估与可视化流程一、脚本功能概览二、可视化与评分机制详解1. 真实框解析2. 调用模型处理帧3. 预测中心点与真实值的对比4. 打分策略5. 图像可视化三、目录结构要求四、运行方式五、应用场景与拓展思路六、总结七,…

Comparator 比较器

在Java中&#xff0c;Comparator.comparingInt(String::length) 是一个用于创建比较器&#xff08;Comparator&#xff09;的静态方法调用&#xff0c;它的核心作用是定义一个比较规则&#xff0c;使对象按照特定属性&#xff08;这里是字符串长度&#xff09;进行比较。下面从…

无人设备遥控器之无线通讯技术篇

无人设备遥控器的无线通讯技术是确保遥控操作准确、稳定、高效进行的关键。以下是对无人设备遥控器无线通讯技术的详细解析&#xff1a; 一、主要无线通讯技术类型 Wi-Fi通讯技术 原理&#xff1a;基于IEEE 802.11标准&#xff0c;通过无线接入点&#xff08;AP&#xff09;…

Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)

Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;七&#xff09; 在 Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;六&#xff09;-CSDN博客 的基础上改进&#xff0c;主要是…

ET EntityRef EntityWeakRef 类分析

EntityRef EntityWeakRef 相同点 也是这两个的作用&#xff1a;这两个都是用来表示一个实体引用。一般来说使用一个对象&#xff0c;直接持有对象就可以&#xff0c;但是如果对象来自于对象池&#xff0c;这个时候直接持有对象不合适&#xff0c;对象可能已经被对象池回收&…

基于Leaflet和天地图的免费运动场所WebGIS可视化-以长沙市为例

目录 前言 一、免费运动场所数据整理 1、本地宝数据简介 2、Java后台数据解析 二、Leaflet前端地图展示 1、基础数据准备 2、具体位置及属性标记 三、成果展示 1、空间位置分布 2、东风路立交桥运动公园 3、芙蓉区花侯路浏阳河大桥下方 4、梅岭国际小区 5、湖南大学…

Flutter——数据库Drift开发详细教程(六)

目录 1.视图2.视图中列的可空性3.DAO4.流查询5.高级用途6.注意事项 1.视图 也可以将SQL 视图定义 为 Dart 类。为此&#xff0c;请编写一个抽象类来扩展View。此示例声明了一个视图&#xff0c;用于读取示例中架构中某个类别中添加的待办事项数量&#xff1a; abstract class C…

Kafka 4.0版本的推出:数据处理新纪元的破晓之光

之前做大数据相关项目&#xff0c;在项目中都使用过kafka。在数字化时代&#xff0c;数据如洪流般涌来&#xff0c;如何高效处理这些数据成为关键。Kafka 就像是一条 “智能数据管道”&#xff0c;在数据的世界里扮演着至关重要的角色。如果你第一次接触它&#xff0c;不妨把它…

RabbitMQ高级篇-MQ的可靠性

目录 MQ的可靠性 1.如何设置数据持久化 1.1.交换机持久化 1.2.队列持久化 1.3.消息持久化 2.消息持久化 队列持久化&#xff1a; 消息持久化&#xff1a; 3.非消息持久化 非持久化队列&#xff1a; 非持久化消息&#xff1a; 4.消息的存储机制 4.1持久化消息&…

ctfshow权限维持

1&#xff0c;web670 我们先看一下这个php代码 error_reporting(0);#关闭错误报告 highlight_file(__FILE__);#内容高亮显示$a$_GET[action];#get传参switch($a){case cmd:eval($_POST[cmd]);break;case check:file_get_contents("http://checker/api/check");#获取…

力扣算法ing(71 / 100)

5.15 哈希表合集—349.两个数组的交集 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2]示例…

(面试)Handler消息处理机制原理

Handler是用于实现线程间通信和任务调度的一种机&#xff08;Handler、 Looper、MessageQueue、 Message&#xff09;。Handler 允许线程间发送Message或Runnable对象进行通信。在Android中UI修改只能通过UI Thread&#xff0c;子线程不能更新UI。如果子线程想更新UI&#xff0…

Dify 实战教程 | 5分钟打造文本生成应用( Stable Diffusion 提示词生成器)

AI 绘画离不开「提示词&#xff08;Prompt&#xff09;」——如何构造清晰、生动、有表现力的提示词&#xff0c;直接决定你生成图像的质量。而 Stable Diffusion 的提示词构造相比 Midjourney 更加自由&#xff0c;但也更考验组织语言的能力。 今天这篇教程&#xff0c;教你零…

RPC框架源码分析学习(二)

RPC框架源码分析与原理解读 前言 在分布式系统开发中&#xff0c;远程过程调用(RPC)是一项基础且关键的技术。通过对KVstorageBaseRaft-cpp项目RPC模块的源码分析&#xff0c;我深入理解了RPC框架的工作原理和实现细节。本文将从程序员视角分享我的学习心得。 框架概述 本项…