架构师必备:如何基于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

目录
相关文章
|
21天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
141 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
8天前
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
167 7
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
15天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
24天前
|
缓存 Kubernetes 容灾
如何基于服务网格构建高可用架构
分享如何利用服务网格构建更强更全面的高可用架构
|
2月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
114 5
|
29天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
42 2
|
30天前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
Java 开发工具 开发者
基于springboot架构 钉钉扫码登录第三方应用
• 获取appId及appSecret • 项目应用 • 1.配置文件增加如下配置 • 2.下载sdk • 3.将sdk引入项目 • 3.修改登录跳转方法/login • 4.登录页修改 • 5.扫码重定向实现登录的方法如下 • 6.重写UsernamePasswordToken
基于springboot架构 钉钉扫码登录第三方应用
|
3月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
198 1