构建强大应用的引擎:深度解析Spring Boot Starter机制

目录

  • 引言
  • 1. Spring Boot Starter机制
    • 1.1 什么是Spring Boot Starter
    • 1.2 为什么要使用Spring Boot Starter
    • 1.3.应用场景
    • 1.4.自动加载核心注解说明
  • 2. 综合案例
    • 配置类制作
    • 控制功能实现
  • 总结

在这里插入图片描述

引言

在当今互联网时代,构建高性能、可维护的应用已成为开发者的首要任务。Spring Boot Starter机制作为Spring Boot框架的一项强大功能,为开发者提供了简化配置、快速搭建项目的便捷工具。本文将深度解析Spring Boot Starter机制,揭示其背后的原理,同时通过综合案例展示其实际应用。

1. Spring Boot Starter机制

1.1 什么是Spring Boot Starter

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

SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。SpringBoot提供了针对日常企业应用研发各种场景的spring-boot-starter依赖模块。

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

1.2 为什么要使用Spring Boot Starter

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

对比分析:Starter与传统配置的优势
通过实际案例对比,分析使用Spring Boot Starter相对于传统配置方式的便捷性、可维护性等方面的优势。帮助开发者理解在何种场景下选择使用Spring Boot Starter更为合适。

1.3.应用场景

在我们的日常开发工作中,可能会需要开发一个通用模块,以供其它工程复用。SpringBoot就为我们提供这样的功能机制,我们可以把我们的通用模块封装成一个个starter,这样其它工程复用的时候只需要在pom中引用依赖即可,由SpringBoot为我们完成自动装配。

常见应用场景:

1)通用模块-短信发送模块

2)基于AOP技术实现日志切面

3)分布式雪花ID,Long转String,解决精度问题

4)微服务项目的数据库连接池配置

5)微服务项目的每个模块都要访问redis数据库,每个模块都要配置redisTemplate

1.4.自动加载核心注解说明

在这里插入图片描述

2. 综合案例

配置类制作

yml

sms:key: 1001secret: 1002

pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

spring-boot-configuration-processor 是一个注解处理器,用于处理 Spring Boot 配置类的注解,并生成配置属性的元数据。它在开发过程中起到以下几个重要的作用:

  1. 生成配置属性的元数据: 当你使用 @ConfigurationProperties 注解来声明配置类时,spring-boot-configuration-processor 会解析该注解,并生成与配置属性相关的元数据。这些元数据包括属性的名称、类型、描述、默认值等信息。这些信息可以帮助 IDE 在开发过程中提供代码提示、自动补全和验证功能。
  2. 提供配置属性的编译时验证: 使用 @ConfigurationProperties 注解时,你可以使用其他注解(如 @Value@Valid 等)来描述配置属性的约束条件。spring-boot-configuration-processor 可以处理这些注解,并在编译时进行验证。这样,你可以在开发阶段及早发现配置属性的错误或不一致,而不是在运行时才遇到问题。
  3. 简化配置类的编写: 通过使用 spring-boot-configuration-processor,你可以更轻松地编写配置类。它会自动处理 @ConfigurationProperties 注解及其相关注解,生成属性的 getter、setter 方法,并提供默认的配置文件映射规则。这样,你可以专注于定义配置属性的结构和业务逻辑,而不需要手动编写重复的代码。
  4. 提升开发体验: spring-boot-configuration-processor 增强了开发工具的功能,例如在 IDE 中提供配置属性的智能提示、文档、类型检查等功能。这可以减少开发过程中的错误,并提高代码的可读性和可维护性。
package com.yuan.smsspringbootstart;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @author 叶秋* @site* @company 卓京公司* @create 2023-12-15 14:03*/
@Data@ConfigurationProperties(prefix = "sms")
public class SmsProperties {//应用标识private String key;//应用密钥private String secret;
}
package com.yuan.smsspringbootstart;import com.yuan.smsspringbootstart.service.ISmsService;
import com.yuan.smsspringbootstart.service.SmsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;/*** @author 叶秋* @site* @company 卓京公司* @create 2023-12-15 14:28*/
@Configuration
@EnableConfigurationProperties({SmsProperties.class})
public class SmsConfig {@Autowiredprivate SmsProperties smsProperties;@Beanpublic ISmsService smsService(){return new SmsServiceImpl(smsProperties);}}
package com.yuan.smsspringbootstart.service;public interface ISmsService {/*** 发送短信** @param phone        要发送的手机号* @param data         要发送的内容*/void send(String phone, String data);}
package com.yuan.smsspringbootstart.service;import com.yuan.smsspringbootstart.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.getKey();String secret = smsProperties.getSecret();System.out.println("接入短信系统,Key=" + key + ",Secret=" + secret);System.out.println("短信发送,phone=" + phone + "data=" + data);}}

控制功能实现

在新的项目中加入配置
pom.xml

<dependency><groupId>com.yuan</groupId><artifactId>sms-spring-boot-start</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

yml

sms:key: 1001secret: 1002enable: true
package com.yuan.smsspringbootstart;import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @author 叶秋* @site* @company 卓京公司* @create 2023-12-15 14:03*/
@Data
@ConfigurationProperties(prefix = "sms")
public class SmsProperties {//应用标识private String key;//应用密钥private String secret;private String enable;
}
package com.yuan.smsspringbootstart;import com.yuan.smsspringbootstart.service.ISmsService;
import com.yuan.smsspringbootstart.service.SmsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;/*** @author 叶秋* @site* @company 卓京公司* @create 2023-12-15 14:28*/
@Configuration
@EnableConfigurationProperties({SmsProperties.class})
@ConditionalOnProperty(prefix = "sms",name = "enable",havingValue = "true")
public class SmsConfig {@Autowiredprivate SmsProperties smsProperties;@Beanpublic ISmsService smsService(){return new SmsServiceImpl(smsProperties);}}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yuan.smsspringbootstart.SmsConfig

测试效果

在这里插入图片描述

总结

Spring Boot Starter机制作为Spring Boot框架的一项核心功能,为开发者提供了更便捷、高效的开发体验。通过深入解析Starter的结构、优势以及自动加载机制,本文旨在帮助开发者更好地理解和应用Spring Boot Starter,从而构建出更为强大、可维护的应用。希望读者在阅读完本文后,能够对Spring Boot Starter有更深入的认识,并在实际项目中充分发挥其优势。

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

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

相关文章

ISCTF(CRYPTO)

easy_rsa nc连接看看 脚本 import gmpy2import libnumfrom Crypto.Util.number import *from binascii import a2b_hex, b2a_hexflag "*****************"p 11920076502966619778438716819444048800827104655497817807132072529253600622832779629686654276924193…

PPT插件-好用的插件-放映笔、绘图板-大珩助手

放映笔 幻灯片放映时&#xff0c;工具在幻灯片的左下方&#xff0c;本工具在幻灯片的右侧&#xff0c;可以移动&#xff0c;可以方便在右侧讲课时候使用 绘图板 可在绘图板上写签名、绘制图画、写字等等&#xff0c;点画笔切换橡皮擦&#xff0c;点插入绘图&#xff0c;将背景…

基于PaddleNLP的深度学习对文本自动添加标点符号(一)

前言 目前以深度学习对文本自动添加标点符号研究很少&#xff0c;已知的开源项目并不多&#xff0c;详细的介绍就更少了&#xff0c;但对文本自动添加标点符号又在古文识别语音识别上有重大应用。 基于此&#xff0c;本文开始讲解基于PaddleNLP的深度学习对文本自动添加标点符号…

IDEA设置查看JDK源码

问题 我们在查看JDK源码时&#xff0c;可能会遇到这种情况&#xff0c;步入底层查看JDK源码时&#xff0c;出现一堆var变量&#xff0c;可读性非常之差&#xff0c;例如笔者最近想看到nio包下的SocketChannelImpl的write方法&#xff0c;结果看到这样一番景象&#xff1a; pu…

Lvs-NAT部署

目录 一.什么是lvs 二.集群的类型 三.lvs的三种模式 四.lvs调度算法 五.LVS-NAT模式部署 一.什么是lvs lvs负载均衡群集&#xff1a;由多台主机构成&#xff0c;对外表现为一个整体&#xff0c;只提供一个访问入口&#xff0c;相当于一个大计算机。 二.集群的类型 1&am…

可视化数据监控大屏网页界面,数据大屏模版PS资料(免费UI源文件)

数据大屏模板在大数据领域被广泛应用&#xff0c;其优势在于能够将复杂的数据通过图形、图表等方式呈现出来&#xff0c;使数据更易于理解。数据大屏模板可以用来进行数据分析。通过对数据的比较、趋势分析、异常检测等&#xff0c;可以发现数据中的规律和问题&#xff0c;为决…

网络协议 - DNS 相关详解

网络协议 - DNS 相关详解 DNS简介域名层级结构域名服务器 DNS 解析流程为什么DNS通常基于UDP DNS 查询dig 查询host查询nslookup查询whois查询在线工具查询 DNS 调度原理地理位置调度不准确规则变更生效时间不确定高可用 DNS 安全相关什么是DNS劫持什么是DNS污染为什么要DNS流量…

TCP/IP详解——UDP 协议

文章目录 1. UDP1.1 UDP 头部1.2 UDP 校验和1.3 UDP 传输过程1.4 UDP-Lite1.5 最大 UDP 数据报长度1.6 UDP 输入队列 1. UDP UDP&#xff1a;用户数据报协议&#xff08;User Datagram Protocol&#xff09;面向无连接的&#xff0c;也就是无需建立连接&#xff0c;传输不可靠。…

(十六)Flask之蓝图

蓝图 Flask蓝图&#xff08;Blueprint&#xff09;是Flask框架中用于组织和管理路由、视图函数以及静态文件的一种机制。它提供了一种将应用程序拆分为更小、可重用组件的方式&#xff0c;使得项目结构更清晰&#xff0c;代码更易于维护。 使用Flask蓝图&#xff0c;可以将相…

MongoDB mapReduce案例分析

文章目录 第1关&#xff1a;mongoDB的插入和查询第2关&#xff1a;MongoDB的删除操作 第1关&#xff1a;mongoDB的插入和查询 编程要求 根据提示&#xff0c;在右侧编辑器补充代码&#xff0c;根据提示。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入&#…

Win10的SVN Adapter V1.0 中黄色感叹号 -- 解决

大部分都问题都可以通过&#xff1a; 关闭 SVN Adapter V1.0 在下载最新的 SVNDrv.sys替换 C:\Windows\System32\drivers 中的同名文件启动 SVN Adapter V1.0 就能成功 但是部分人的电脑 SVN Adapter V1.0 是有感叹号的&#xff0c;说明注册表有问题 先用 CCleaner 修复注册表…

电脑自动关机怎么设置?

电脑自动关机怎么设置&#xff1f;如果你是一名上班族&#xff0c;工作忙起来很多事情都会忘记做&#xff0c;有时候忙到很晚后紧急下班&#xff0c;就会忘记给电脑关机&#xff0c;电脑如果经常不关机&#xff0c;那么电脑就会超负荷的运转&#xff0c;大家都知道电脑的寿命是…

Django 表单处理:从前端到后台的全流程指南

概要 Django作为一个高级Python Web框架&#xff0c;它的表单处理能力强大&#xff0c;可以有效地处理用户输入&#xff0c;进行数据验证以及错误处理。本文将详细介绍如何在Django中创建、处理和使用表单。 1. Django表单系统的核心 Django的表单系统处理表单的生命周期&…

数据结构(七):树介绍及面试常考算法

一、树介绍 1、定义 树形结构是一种层级式的数据结构&#xff0c;由顶点&#xff08;节点&#xff09;和连接它们的边组成。 树类似于图&#xff0c;但区分树和图的重要特征是树中不存在环路。树有以下特点&#xff1a; &#xff08;1&#xff09;每个节点有零个或多个子节点…

C++报错:error C2238: 意外的标记位于“;”之前

报错信息如下&#xff1a; 编译遇见这样的错误信息主要有一下几种&#xff1a; 情况一&#xff1a; 多数情况下出现这种问题的原因是因为头文件重复包含&#xff1a;即头文件A包含了B&#xff0c;头文件B又包含了A&#xff0c;导致编译器在加载头文件时陷入死循环。 解决办法…

AR-LDM原理及代码分析

AR-LDM原理AR-LDM代码分析pytorch_lightning(pl)的hook流程main.py 具体分析TrainSampleLightningDatasetARLDM blip mm encoder AR-LDM原理 左边是模仿了自回归地从1, 2, ..., j-1来构造 j 时刻的 frame 的过程。 在普通Stable Diffusion的基础上&#xff0c;使用了1, 2, .…

MySQL DQL

目录 一、DQL概述 二、基础查询 三、条件查询 四、聚合查询 五、分组查询 六、排序查询 七、分页查询 八、其它测试 九、执行顺序 一、DQL概述 DQL英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记录。查询关…

布局前沿技术,紫光展锐推动6G创新融合发展

随着5G进入规模化商用阶段&#xff0c;6G研究已在全球范围内拉开帷幕。2023年6月&#xff0c;ITU发布了《IMT面向2030及未来发展的框架和总体目标建议书》&#xff0c;在升级5G三大应用场景的同时&#xff0c;扩展出三个跨领域场景&#xff0c;形成6G的六大应用场景&#xff0c…

3D Web轻量引擎HOOPS Communicator如何实现对大模型的渲染支持?

除了读取轻松外&#xff0c;HOOPS Communicator对超大模型的支持效果也非常好&#xff0c;它可以支持30GB的包含70万个零件和3.5亿个三角面的Catia装配模型&#xff01; 那么它是如何来实现对大模型的支持呢&#xff1f; 我们将从以下几个方面与大家分享&#xff1a;最低帧率…

Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版

—————————————————————————————————————————————— 博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码…