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

目录
相关文章
|
1天前
|
Cloud Native 持续交付 云计算
构建未来:云原生架构在现代企业中的应用与实践
【5月更文挑战第25天】 随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云原生技术以其独特的弹性、可扩展性和敏捷性,成为推动企业技术创新的重要力量。本文将深入探讨云原生架构的核心概念,分析其在现代企业中的应用实例,并提出实施策略和最佳实践,以助力企业在激烈的市场竞争中占据先机。
|
1天前
|
Cloud Native 搜索推荐 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用
【5月更文挑战第25天】 随着企业加速其数字化转型的步伐,云原生架构已成为推动创新与维持竞争力的核心技术之一。本文深入探讨了云原生技术如何为企业带来敏捷性、可扩展性及成本效益,同时分析了在采纳云原生过程中面临的主要挑战和解决策略。通过案例研究和最佳实践的分享,文章旨在为决策者提供实施云原生解决方案的洞见,并展望云原生对企业未来发展的潜在影响。
|
1天前
|
安全 API 持续交付
构建高效微服务架构:从理论到实践
【5月更文挑战第25天】在现代软件开发领域,微服务架构已经成为实现灵活、可扩展和容错系统的关键设计模式。本文不仅深入探讨了微服务的核心概念与设计原则,还展示了如何将这些理念应用于实际的开发流程中。通过具体案例分析,我们将详细阐述在构建微服务时如何进行服务的划分、管理的优化以及安全性的加固,旨在为开发者提供一套实用的微服务开发指南。
|
1天前
|
消息中间件 监控 安全
构建高效微服务架构:从理论到实践
【5月更文挑战第25天】 在现代软件开发领域,"微服务"一词已然成为实现业务敏捷性、可扩展性与技术多样性的代名词。本文将深入探讨如何构建一个高效的微服务架构,涵盖从基本理念的梳理、关键技术选型,到具体实施过程中的最佳实践。我们将通过实际案例分析,展示如何在保证系统稳定性的前提下,提升服务的独立性和弹性。文章不仅为开发者提供了一套可行的后端开发框架参考,同时也为架构师呈现了一幅微服务实施的蓝图。
|
1天前
|
监控 Kubernetes 安全
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第25天】 在现代软件开发中,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序拆分为独立、可部署的服务来提高系统的可伸缩性和灵活性。本文深入探讨了如何构建一个高效的微服务架构,包括关键的设计原则、技术选型以及实践中的最佳实践。我们将重点讨论如何确保服务的高可用性、容错性和一致性,同时考虑到性能和成本效益的平衡。
|
1天前
|
监控 安全 API
构建高效可扩展的微服务架构
【5月更文挑战第25天】 随着数字化转型的加速,企业需要构建更加灵活、可扩展的系统以应对不断变化的市场需求。微服务架构作为一种创新的软件开发模式,以其独立性、灵活性和可伸缩性成为解决复杂系统问题的有效途径。本文将深入探讨如何构建一个高效且可扩展的微服务架构,涵盖关键设计原则、技术选型以及实践案例,旨在为开发者和企业提供实用的参考和指导。
|
1天前
|
Kubernetes Cloud Native 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用
【5月更文挑战第25天】 随着企业加速其数字化转型的步伐,云原生技术已不仅仅是一种趋势,而是成为了推动创新和实现敏捷性的必经之路。本文将深入探讨云原生架构的核心概念、关键技术以及它如何为企业带来灵活性、可扩展性及成本效益。我们还将通过案例分析展示企业如何利用云原生技术成功转型,并讨论在实施过程中可能遇到的挑战及解决策略。
|
1天前
|
监控 持续交付 数据库
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第25天】 在当今快速迭代的软件发展环境中,微服务架构因其灵活性和可扩展性而广受青睐。本文将深入探讨构建一个高效且可靠的微服务系统的策略与实践,从服务划分、通信机制到数据一致性问题,再到容器化部署和服务监控。通过实例分析和最佳实践的分享,旨在为开发者提供一个清晰可行的技术蓝图,帮助他们在设计微服务时做出明智决策。
|
1天前
|
运维 Cloud Native 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用
【5月更文挑战第25天】 随着企业加速其数字化转型的步伐,云原生技术已成为推动创新和维持竞争力的重要驱动力。本文深入探讨了云原生架构的核心组件,包括容器化、微服务、持续集成/持续部署(CI/CD)以及DevOps实践,并分析了它们如何共同塑造现代应用开发和运维模式。通过采用云原生方法,组织能够实现更快的迭代速度、提高资源效率,并最终达到更高的业务敏捷性。文章还讨论了企业在采纳云原生技术时面临的挑战及克服策略,为读者提供了一种面向未来的IT架构视角。
|
1天前
|
消息中间件 持续交付 数据库
构建高效微服务架构的实践指南
【5月更文挑战第25天】随着现代软件开发的复杂性增加,微服务架构已成为众多企业实现敏捷开发和部署的首选方案。本文深入探讨了构建高效微服务架构的关键策略,包括服务划分原则、通信机制优化、数据一致性保障以及持续集成与部署的最佳实践。通过综合分析多个成功案例,本文为开发者提供了一套系统的方法论,旨在帮助团队提升开发效率,确保系统的可扩展性和稳定性,并最终促进业务的快速增长。