架构师必备:如何基于springboot优雅的构建公共的starter

简介: 在我们平时的**Springboot**应用程序开发中,我们经常把我们需要的starter引入,这样程序启动时就会把这个starter的相关功能自动配置到spring的应用程序容器中,可以极大地简化我们的Spring应用程序开发和配置过程。

基本介绍

在我们平时的Springboot应用程序开发中,我们经常把我们需要的starter引入,这样程序启动时就会把这个starter的相关功能自动配置到spring的应用程序容器中
,可以极大地简化我们的Spring应用程序开发和配置过程。

比如spring-boot-starter-web这个starter我们应该都很熟悉,通过引入这个starter我们程序就已经有了web服务器、springmvc等基本能力;
相较于传统的非springboot的web开发免去了引入相关依赖并编写众多配置文件的令人头疼的过程。

原理分析

SPI机制

SPI(Service Provider Interface),springboot的一种服务发现机制规范。具体实现形式是通过在项目resources里添加的spring.factories文件来指定
需要扫描的配置类去初始化到容器里。

扫描流程

  • 1、使用SpringApplication启动springboot程序

      SpringApplication.run(YeeeAppBootstrapApplication.class, args);
    
  • 2、程序启动过程中,会调用到spring的AbstractApplicationContext刷新上下文,这个过程中会涉及到BeanDefinitions的定义及初始化

      refreshContext(ConfigurableApplicationContext context)
    
  • 3、在refresh过程中,会有专门的ConfigPostProcessors来读取classes/META-INF/spring.factories文件中以EnableAutoConfiguration类标识的所有需要扫码的配置类
    ,将其注册到BeanDefinitions中

      ...
      invokeBeanFactoryPostProcessors(beanFactory);
      ...
      // 读取spring.factories文件中以EnableAutoConfiguration类标识的所有需要扫码的配置类
      List<String> configurations = SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class);
      ...
      // 注册到BeanFactory的beanDefinitionNames中
      processConfigBeanDefinitions(BeanDefinitionRegistry registry)
      ...
    
  • 4、refresh最后就是BeanDefinitions的初始化了。
    finishBeanFactoryInitialization(beanFactory);
    

怎么构建自定义的starter?

案例:swagger2的公共starter

场景描述

在我们项目开发中swagger显然已经必不可少,在没有构建公共的starter后,我们每次使用swagger都需要引入许多依赖并且
还得写一些额外的配置类来初始化它;在封装成starter后我们只需要在pom中引入这个starter并且不需要额外配置就可以拥有这个功能。

具体构建过程

  • 1、新建maven项目base-swagger,并且在/src/main/resources中新增文件夹METAINF,然后在METAINF中增加spring.factories文件

base-swagger-01.png

  • 2、编写swagger相关的配置类

base-swagger-02.png

  • 3、编写主配置类,并把全路径名写到spring.factories中
    ```java
    @ComponentScan({"vip.yeee.memo.base.swagger.config", "springfox.documentation.schema"})
    public class SwaggerAutoConfigure {

    public SwaggerAutoConfigure() {

      log.info("自动配置-swagger");
    

    }
    }

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
vip.yeee.memo.base.swagger.SwaggerAutoConfigure


- 4、在需要使用swagger的项目pom中引入该starter
```xml
<dependency>
    <groupId>vip.yeee.memo</groupId>
    <artifactId>base-swagger</artifactId>
</dependency>
  • Github详细代码

// 1.自定义starter项目
https://github.com/yeeevip/yeee-memo/tree/master/memo-parent/memo-base/base-swagger

版权 本文为yeee.vip原创文章,转载无需和我联系,但请注明来自https://www.yeee.vip

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 安全
用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解
本文详细介绍了DeepSeek R1模型的构建过程,涵盖从基础模型选型到多阶段训练流程,再到关键技术如强化学习、拒绝采样和知识蒸馏的应用。
339 3
用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解
|
4月前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
288 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
17天前
|
人工智能 自然语言处理 前端开发
20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
本文介绍如何使用Spring Boot3与Vue2快速构建基于DeepSeek的AI对话系统。系统具备实时流式交互、Markdown内容渲染、前端安全防护等功能,采用响应式架构提升性能。后端以Spring Boot为核心,结合WebFlux和Lombok开发;前端使用Vue2配合WebSocket实现双向通信,并通过DOMPurify保障安全性。项目支持中文语义优化,API延迟低,成本可控,适合个人及企业应用。跟随教程,轻松开启AI应用开发之旅!
|
1月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
2月前
|
JavaScript 前端开发 Java
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
Jeesite5 是一个基于 Spring Boot 3.3 和 Vue3 的企业级快速开发平台,集成了众多优秀开源项目,如 MyBatis Plus、Bootstrap、JQuery 等。它提供了模块化设计、权限管理、多数据库支持、代码生成器和国际化等功能,极大地提高了企业级项目的开发效率。Jeesite5 广泛应用于企业管理系统、电商平台、客户关系管理和知识管理等领域。通过其强大的功能和灵活性,Jeesite5 成为了企业级开发的首选框架之一。访问 [Gitee 页面](https://gitee.com/thinkgem/jeesite5) 获取更多信息。
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
|
4月前
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
1238 8
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
3月前
|
监控 Java API
【潜意识Java】使用SpringBoot构建高效的RESTfulAPI
本文介绍了使用Spring Boot构建RESTful API的完整流程,涵盖从项目创建到API测试的各个步骤。
83 1
|
3月前
|
存储 消息中间件 前端开发
工厂人员定位管理系统架构设计:构建一个高效、可扩展的人员精确定位
本文将深入探讨工厂人员定位管理系统的架构设计,详细解析前端展示层、后端服务层、数据库设计、通信协议选择等关键环节,并探讨如何通过微服务架构实现系统的可扩展性和稳定性。
122 10
|
4月前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
103 3
|
4月前
|
缓存 Kubernetes 容灾
如何基于服务网格构建高可用架构
分享如何利用服务网格构建更强更全面的高可用架构

热门文章

最新文章