快速开发一个自定义 Spring Boot Starter ,希望你也会

common-spring-boot-stater:基于SpringBoot的Web开发公共模块 基于SpringBoot的Web开发公共服务 一,统一异常处理 1.1异常处理器 1.1.1基础异常处理器 基础异常处理器,负责处理一些基础的异常: 异常类型 响应码 响应文本 BusinessException 可自定义 可自定义 空指针异常 500 空指针异常 例外 500 未知异常 1.1.2数据访问异常处理器 负责处理数据库访问产生的异常: 异常类型 响应码 响应文本 DataAccessException 500 数据访问错误 1.1.3 Servlet异常处理器 负责处理Servlet产生的异常: 异常类型 响应码 响应文本 DataAccessException 500 数据访问错误 NoHandlerFoundException 404 没有对应的处理器 HttpRequestMethodNotSupportedException 405 不支持的请求方式 Http 立即下载

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:jianshu.com/p/45538b44e04e

“

众所周知,Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增。在传统Maven项目中通常将一些层、组件拆分为模块来管理,以便相互依赖复用,在Spring Boot项目中我们则可以创建自定义Spring Boot Starter来达成该目的。

好,开始,先创建一个Maven项目并引入依赖,pom.xml如下,供参考~

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>example-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.5.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

这里说下artifactId的命名问题,Spring 官方 Starter通常命名为spring-boot-starter-{name}如 spring-boot-starter-web, Spring官方建议非官方Starter命名应遵循{name}-spring-boot-starter的格式。

这里讲一下我们的Starter要实现的功能,很简单,提供一个Service,包含一个能够将字符串加上前后缀的方法String wrap(String word)。

public class ExampleService {

    private String prefix;
    private String suffix;

    public ExampleService(String prefix, String suffix) {
        this.prefix = prefix;
        this.suffix = suffix;
    }
    public String wrap(String word) {
        return prefix + word + suffix;
    }
}

前缀、后缀通过读取application.properties(yml)内的参数获得

@ConfigurationProperties("example.service")
public class ExampleServiceProperties {
    private String prefix;
    private String suffix;
    //省略 getter setter

重点,编写AutoConfigure类

@Configuration
@ConditionalOnClass(ExampleService.class)
@EnableConfigurationProperties(ExampleServiceProperties.class)
public class ExampleAutoConfigure {

    @Autowired
    private ExampleServiceProperties properties;

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = "example.service",value = "enabled",havingValue = "true")
    ExampleService exampleService (){
        return  new ExampleService(properties.getPrefix(),properties.getSuffix());
    }

}

解释下用到的几个和Starter相关的注解:

  • @ConditionalOnClass,当classpath下发现该类的情况下进行自动配置。

  • @ConditionalOnMissingBean,当Spring Context中不存在该Bean时。

  • @ConditionalOnProperty(prefix = "example.service",value = "enabled",havingValue = "true"),当配置文件中example.service.enabled=true时。

更多相关注解,建议阅读官方文档该部分。

最后一步,在resources/META-INF/下创建spring.factories文件,内容供参考下面~

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.autocinfigure.ExampleAutoConfigure

OK,完事,运行 mvn:install打包安装,一个Spring Boot Starter便开发完成了。如果你需要该Starter的源代码,点这里。


创建一个Spring Boot项目来 试试~

引入example-spring-boot-starter依赖

 <dependency>
    <groupId>com.example</groupId>
    <artifactId>example-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
 </dependency>

创建application.properties,进行配置

example.service.enabled=true
example.service.prefix=####
example.service.suffix=@@@@

创建一个简单的Spring Web Application,注入Starter提供的ExampleService看它能否正常工作~

@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Autowired
    private ExampleService exampleService;

    @GetMapping("/input")
    public String input(String word){
        return exampleService.wrap(word);
    }

}

启动Application,访问/input接口试试看~

“

总结下Starter的工作原理

  1. Spring Boot在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包

  2. 根据spring.factories配置加载AutoConfigure类

  3. 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

兄弟,艿一口,点个赞!????

103、模拟增益vs数字增益:信噪比、动态范围与噪声放大的权衡艺术及调试陷阱 摘要 本文深入探讨了模拟增益与数字增益在图像处理中的差异及其对信噪比、动态范围和噪声放大的影响。作者通过实际案例揭示了数字增益可能导致的噪点放大问题,分析了模拟增益在物理层面对信号和噪声的放大机制,以及数字增益对量化噪声的影响。文章详细比较了两种增益方式下信噪比的变化曲线,指出数字增益会平方放大量化噪声的致命缺陷。此外,作者总结了常见的调试陷阱,并提供了针对不同光照场景的增益分配策略建议。最后强调调试时应优先考虑模拟增益,严格控制数字增益幅度,并配合降噪算法优化以获得最佳图像质量。 阅读详情

相关推荐

数理金融学笔记 Chap2 二叉树模型Binomial

2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model

weixin_66831131的博客 2389

Spring boot基本使用及 stater机制原理

之前得文章主要介绍得spring以及springmvc,其实整个文章主要介绍的是spring 创建bean 以及各个对bean实例创建过程中的各个部分扩展,以及spring mvc 如何处理http请求,然后并使用 handler对于 各个请求的匹配到controller 上 ;这篇文章 继续 对spring boot 进行深入研究,从 spring boot 搭建开始 到如何使用 ,以及 stater机制 怎么会有约定大于配置的说法 ,极大的简化我们的开发。

踩踩踩从踩的博客 5031

ENVI中Landsat8大气校正法实现地表温度精准反演

本文详细介绍了在ENVI软件中,利用大气校正法对Landsat8热红外数据进行地表温度反演的完整流程。该方法通过辐射定标、大气参数获取、发射率估算及温度转换四个核心步骤,精准剔除大气干扰,还原地表真实温度,是城市热岛效应监测、农业旱情分析等应用的关键技术。

weixin_29292535的博客 150

从零开始开发一个Spring Boot Starter

原文地址:添加链接描述,添加链接描述 一.Spring Boot Starter简介 Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。 例如在Maven的依赖中加...

yxwb1253587469的博客 2265

Codex API 直接集成指南:告别中转代理,构建稳定高效的 AI 应用

在 AI 应用开发中,API 集成是连接模型能力与业务逻辑的核心环节。其基本原理是通过 HTTP 协议,按照服务提供商定义的规范发送请求并解析响应,实现远程调用。标准化的 API 设计确保了跨平台和跨语言的互操作性,其技术价值在于提供了稳定、可控且可扩展的服务接入方式,是构建企业级智能应用的基础。在实际应用场景中,开发者常需集成如 Codex 这类聚合了多种大语言模型的平台,以调用诸如 DeepSeek 等先进模型。然而,部分开发者仍依赖过时的第三方中转代理工具,这不仅引入了单点故障和版本锁定的风险,还可能

weixin_28224217的博客 339

RPG MV游戏数据修改指南:从JSON解析到脚本进阶

游戏数据修改是游戏开发与逆向工程中的常见实践,其核心原理在于解析和操作游戏资源文件。许多现代游戏引擎采用结构化数据格式(如JSON)存储游戏配置,这为外部修改提供了可能。通过理解文件结构、数据格式与游戏逻辑的关联,开发者或爱好者可以调整游戏平衡、修复问题或实现个性化定制,这不仅能深化对游戏设计机制的理解,也具备实际的技术学习价值。本文以基于Web技术栈的RPG Maker MV(RPG MV)引擎为例,其游戏数据多以明文JSON存储,结构清晰。文章将具体阐述如何安全地修改角色属性、物品效果、敌人数据及技能公

weixin_29001419的博客 407

Spring Boot自动装配原理,SpringBootStarter

Spring Boot Starter Spring Boot 大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot 提供的starter来完成的。 starter介绍 springboot在配置上相比spring要简单许多,其核心在于spring-boot-starter,在使用spring boot来搭建一个项目时,只需要引入官方提供的starter,就可以直接使用,免去了各种配置。starter简单来讲就是引入了一些相关的依赖和一些初始化的配置 Spring 官方提供了很多star

qq_44073614的博客 3163

《解锁GCC版本选择的奥秘:从入门到精通》

GCC 版本的选择是一项复杂而关键的决策,犹如一场精心策划的战略布局,贯穿于软件开发的整个生命周期。从项目需求与兼容性的深度考量,到性能与稳定性的权衡抉择,再到硬件与系统适配的精准对接,每一个环节都紧密相连,相互影响。在游戏开发行业,对性能的极致追求促使开发者青睐较新的 GCC 版本,以实现更流畅的游戏体验和更震撼的视觉效果;科学计算领域则依赖于 GCC 版本对复杂数学运算的高效优化,以应对大规模数据处理的挑战;嵌入式开发行业因硬件资源的限制和对稳定性的严苛要求,通常选择经过长期验证的稳定版本;

zheng_ruiguo的专栏 1419

【Spring Boot】Spring Boot 中的 Starter

Spring Boot 为了简化配置,提供了非常多的 Starter。它先打包好与常用模块相关的所有 JAR 包,并完成自动配置,然后组装成 Starter(如把 Web 相关的 Spring MVC、容器等打包好后组装成 spring-boot-starter-web)。这使得在开发业务代码时不需要过多关注框架的配置,只需关注业务逻辑即可。

Data · Model · Agent · Repeat 6198

Python + NX二次开发,如何配置Python的第三方库(包)?

地球人都知道python有强大的第三方库,可以各类骚操作,包括但不限于人工智能模块。在使用Python进行NX二次开发时,如果能够用得上这些第三方包,那将大大提高效率。本文详述了如何配置,实践证明:可行!

温良 1270

爬虫Incapsula reese84加密案例:Etihad航空(纯算法)

爬虫Incapsula reese84加密案例:Etihad航空,本文就不再讲解如何找加密参数、定位加密参数,以及分析加密的一个过程。就直接从扣算法开始,扣算法前先看之前讲解的加密函数生成的过程,文章会一个函数一个函数的讲解扣算法。fiddler根据规则替换本地文件。调试过程中遇到部分环境不一样是正常的,具体还要根据自己调试的js为准,就像之前补环境时是有二十一个循环,这次扣算法多出一个循环,不过大部分环境是一样的第一个函数:通过document.addEventListener添加了很多事件。

老衲爱洗头的博客 1994

SpringBoot中怎么定义一个stater?自动装配规则到底是怎样的?

最近实习发现公司项目中有spring.factories文件,是用来定义starter的,让这个模块可以那为什么还必须用spring.factories配置才能被其他模块使用,直接引入依赖不能直接使用吗?答案是能用,但是只能使用这个模块中的非Bean,也就是非spring容器中的类(例如工具类的静态方法)。

m0_73520938的博客 1466

【ROS2】从yaml文件中读取参数配置

ROS2:从yaml中读取参数,到节点;使用C++演示参数的增、删、改、查、遍历、监听变化

郭老二 1285

JavaWeb21-Spring Boot:自定义 Starter 开发(封装通用业务组件)

Spring Boot自定义Starter开发指南:实现日志脱敏组件 本文介绍如何开发一个Spring Boot自定义Starter,封装日志脱敏功能。通过创建sensitive-log-spring-boot-starter模块,实现以下功能: 核心功能 字段级脱敏规则定义(如手机号中间四位替换为****) 通过注解标记需要脱敏的方法或参数 支持JSON请求体和响应体的日志脱敏 自定义正则表达式匹配脱敏 实现步骤 创建Maven项目,添加必要的依赖(spring-boot-autoconfigure、sp

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Security- 与 Spring Boot Starter 的自定义整合

文章摘要 本文介绍了如何将Spring Security与自定义Spring Boot Starter整合,构建可复用的安全模块。主要内容包括: Spring Security核心回顾:概述其认证授权机制和安全过滤器链,展示基础配置示例 自定义Starter的必要性:分析多服务场景下重复安全配置的问题,说明自定义Starter带来的优势 实战构建安全Starter: 设计项目结构,包含自动配置类、JWT工具类等核心组件 配置依赖管理(Spring Boot Starter、Spring Security、J

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

如何开发一个你自己的springboot-starter

Starter 是 Spring Boot 的一个核心特性,它包含了一组依赖描述,用来简化应用程序的依赖配置。使用 Starter 可以避免手动管理依赖项的版本冲突问题,同时通过自动配置机制,无需编写大量配置代码就能快速集成某项功能。当我们开发了一个通用功能模块,希望在多个项目中复用时,将其封装为 Starter 是一个很好的选择。这样其他项目只需要引入你的 Starter 依赖,就能自动获得该功能,而无需关心内部实现细节。按照惯例,我们的自定义 Starter 应该使用非官方命名方式。

AWen_Jack的博客 1568

自定义Knife4j-spring-boot-starter

在前后台开发时,需要将接口信息封装成接口文档,可选用knife4j框架生成API接口文档。为了避免重复开发,可将该功能抽离成一个通用的功能,可自定义一个Knife4j-spring-boot-starter,在实际运用时,引用该starter的坐标即可。 如何自定义一个starter,可参考我的上一篇文章Springboot Starter介绍以及实现自定义Starter 2 定义SwaggerProperties 3 定义SwaggerAutoConfiguration

contact97的博客 1万+

spring-boot-starter-logging和spring-boot-starter-web

应用日志和spring-boot-starter-logging Java 的日志系统多种多样,从 java.util 默认提供的日志支持,到 log4j,log4j2,commons logging 等,复杂繁多,所以,应用日志系统的配置就会比较特殊,从而 spring-boot-starter-logging 也比较特殊一些,下面将其作为我们第一个了解的自动配置依赖模块。 假如 maven 依...

吴声子夜歌的博客 9080

快速掌握SpringBootStarter:自定义Starter开发全流程

在Spring Boot的生态系统中,Starter是一种非常强大且实用的功能。它可以帮助开发者快速集成各种第三方库或自定义功能,极大地提高了开发效率。本文将详细介绍自定义Spring Boot Starter的全流程,帮助技术人员快速掌握这一重要技能。

梵心白莲的博客 1061

纷杂的spring-boot-starter

纷杂的spring-boot-starter简述应用日志和spring-boot-starter-logging快速Web应用开发与spring-boot-starter-web项目结构层面的约定SpringMVC框架层面的约定和定制嵌入式Web容器层面的约定和定制数据访问与spring-boot-starter-jdbcSpringBoot应用的数据库版本化管理 简述 1)基于Spring框架的“约定优先于配置(COC)”理念以及最佳实践之路。 2)提供了针对日常企业应用研发各种场景的spring-boo

575

如何发布自定义 Spring Boot Starter

轻量级限流器Spring Boot Starter开发实践 本文介绍了如何从零开发一个自定义限流器Spring Boot Starter并发布到Maven Central的过程。该Starter支持五种限流算法(令牌桶、漏桶、固定窗口、滑动窗口计数器和滑动窗口日志),通过注解方式实现无侵入式限流。核心架构包含自动配置类、限流注解、AOP切面和Redis存储层,利用Spring Boot Starter的特性实现自动配置和依赖聚合。关键实现包括基于条件的自动配置类、可定制的属性配置、多种限流算法注解以及通过A

程序•袁 644

定制你的【Spring Boot Starter】,加速开发效率

自定义 Starter 是在 Spring Boot 中实现代码模块化和功能封装的强大工具。自定义 Starter 允许将应用程序的不同功能模块化,使得代码结构更清晰,易于维护和管理。Starter 可以封装特定功能的代码和配置,使得其他开发人员可以轻松地集成和使用这些功能。使用自定义 Starter 可以加速新项目的开发过程,避免重复编写相似的代码,提高开发效率。Starter 可以定义标准化的配置方式,使得不同项目之间的配置更一致,降低了配置错误的可能性。

q1372302825的博客 2748

了解spring-boot-starter

SpringBoot提供了针对日常企业应用研发各种场景的spring-boot-starter自动配置 依赖模块,如此多“开箱即用”的依赖模块,使得开发各种场景的Spring应用 更加快速和高效,本文会就几个常见的通用spring-boot-starter模块进行了解 一、约定优先于配置 所有的spring-boot-starter都有约定俗成的默认配置,但允许我们调整这些配置以改变默认的配置行为,即“约定优先于配置”。 简单来讲,我们可以将对SpringBoot的行为可以进行干预的配置方式划分 为几类.

栗筝i的博客 5372

如何优雅地创建一个自定义的Spring Boot Starter

本文介绍了如何创建一个自定义的Spring Boot Starter,以及它的命名规范、项目结构、依赖管理、属性类、业务功能类、自动配置类、自动装配文件和使用方法。通过创建一个自定义的Starter,我们可以将一些通用的功能或组件封装起来,方便在不同的项目中复用,提高开发效率和代码质量。同时,本文也介绍了Starter项目的原理和机制,帮助我们深入理解Spring Boot的自动装配特性。不禁感慨,优雅,实在是优雅!

TaloyerG的博客 5631

Spring Boot Demo基础篇:10分钟搭建你的第一个Spring Boot应用

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。本文将以GitHub上的spring-boot-demo项目为例,带你快速上手Spring Boot应用的搭建。 ## 一、准备工作 在开始搭建Spring Boot应用之前,你需要确保以下工具和环境

gitblog_01404的博客 836

纷杂的Spring-boot-starter: 1 应用 日志 和 spring- boot- starter- logging

我认为,SpringBoot微服务框架从两个主要层面影响Spring社区的开发者们: 基于Spring框架的“约定优先于配置(COC)”理念以及最佳实践之路 提供了针对日常企业应用研发各种场景的spring-boot-starter自动配置依赖模块,如此多“开箱即用”的依赖模块,使得开发各种场景的Spring应用更加快速和高效。 SpringBoot提供的这些“开箱即用”的依赖模块都约定以spring-boot-starter-作为命名前缀,并且皆位于org.springframework.boot包或

weixin_44778952的博客 1461
上一篇: Java 源码跟踪阅读技巧
下一篇: 真赞!IDEA 中这么玩 MyBatis,让编码速度飞起!
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值