本文来说下如何自定义一个stater组件。

文章目录

  • 概述
  • 原理浅谈
  • 术语介绍
  • starter组件命名规则

概述

我们都知道可以使用 SpringBoot 快速的开发基于 Spring 框架的项目。由于围绕 SpringBoot 存在很多开箱即用的 Starter 依赖,使得我们在开发业务代码时能够非常方便的、不需要过多关注框架的配置,而只需要关注业务即可。

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。例如我想要在 SpringBoot 项目中集成 Redis,那么我只需要加入 spring-data-redis-starter 的依赖,并简单配置一下连接信息以及 Jedis 连接池配置就可以。这为我们省去了之前很多的配置操作。甚至有些功能的开启只需要在启动类或配置类上增加一个注解即可完成

springboot项目中常用到的starter


那么如果我们想要自己实现自己的 Starter 需要做些什么呢?下面就开始介绍如何实现自己的 spring-boot-starter-xxx。


原理浅谈

从总体上来看,无非就是将Jar包作为项目的依赖引入工程。而现在之所以增加了难度,是因为我们引入的是Spring Boot Starter,所以我们需要去了解Spring Boot对Spring Boot Starter的Jar包是如何加载的?下面我简单说一下。

SpringBoot 在启动时会去依赖的 starter 包中寻找 /META-INF/spring.factories 文件,然后根据文件中配置的 Jar 包去扫描项目所依赖的 Jar 包,这类似于 Java 的 SPI 机制

细节上可以使用@Conditional 系列注解实现更加精确的配置加载Bean的条件。

JavaSPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制


术语介绍

在我们深入了解创建Spring Boot Starter的细节之前,让我们讨论一些有助于理解Starter工作的关键字。

什么是应用程序上下文

在Spring应用程序中,应用程序上下文是组成应用程序的对象(或“bean”)的网络。它包含我们的Web控制器,服务,存储库以及我们的应用程序可能需要的任何(通常是无状态的)对象。

什么是配置

使用注释@Configuration标注的类,扮演添加到应用程序上下文的bean工厂。它可能包含带注释的工厂方法,@Bean其返回值由Spring自动添加到应用程序上下文中。简而言之,Spring配置为应用程序上下文提供bean。

什么是自动配置

自动配置是Spring自动发现的@Configuration类。只要该类位于在类路径classpath上,即可自动配置,并将配置的结果添加到应用程序上下文中。自动配置可以是有条件的,使得其激活取决于外部因素,例如具有特定值的特定配置参数。

什么是自动配置模块

自动配置模块是包含自动配置类的Maven或Gradle模块。这样,我们就可以构建自动为应用程序上下文做贡献的模块,添加某个功能或提供对某个外部库的访问。我们在Spring Boot应用程序中使用它所要做的就是在我们的pom.xml或者包含它的依赖项build.gradle。Spring Boot团队大量使用此方法将Spring Boot与外部库集成。

什么是Spring Boot Starter

最后,Spring Boot Starter是一个Maven或Gradle模块,其唯一目的是提供“使用某个功能”“开始”所需的所有依赖项。这通常意味着它是一个单独的pom.xml或build.gradle文件,包含一个或多个自动配置模块的依赖项以及可能需要的任何其他依赖项。
在Spring Boot应用程序中,我们只需要包含此启动器Starter即可使用该功能。


starter组件命名规则

SpringBoot 官方的建议是,如果是我们开发者自己开发的 starter 组件(即属于第三方组件),那么命名规范是{name}-spring-boot-starter,而如果是 SpringBoot 官方自己开发的组件,则命名为 spring-boot-starter-{name}`。

当然,这只是一个建议,如果非不按这个规则也没什么问题,但是为了更好的识别区分,还是建议按照这个规则来命名。


如何自定义一个starter组件相关推荐

  1. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  2. el-table 树形表格 自定义展开图标_实践一个树形组件

    想实践一个树形组件的起因是发现目前主流UI库在树形组件上都没有提供连接线(ant design有,但不知道为什么设计得发虚,就是各元素之间没有严格衔接上,见下图,而Vue生态圈中的Element UI ...

  3. 微信小程序怎么打通视频号?只差一个自定义版交易组件

    今年以来视频号成为了腾讯新宠,现在视频号日活逼近6亿,早已全面超过快手的3.47亿,并有望在短期内追上抖音.而这样的用户规模,抖音走了6年,视频号只走了2年.木鱼小铺(www.muyu007.cn)相 ...

  4. VUE中自定义一个获取输入车牌号码组件

    VUE自定义一个组件来选择输入车牌号码 展示样式: 组件事件列表: 事件名称 event 获取车牌 @carNum 返回参数是个数组,每个车牌元素 上代码: <template><d ...

  5. 自定义一个SpringBoot Starter

    文章目录 简介 使用Spring Initializr创建一个项目 定义一个配置信息映射类 定义一个Service 定义一个配置类自动装配Service 在spring.factories中指定自动装 ...

  6. Vue 自定义一个全局弹框组件

    前文:其实element ui有提供this.$mesage和this.$notify弹框组件可供使用,但是我们的ui设计的样式以及布局还是不完全一样的,为了达到100%的呈现效果,所以自己写了一个全 ...

  7. 手撸一个动态数据源的Starter 完整编写一个Starter及融合项目的过程 保姆级教程

    手撸一个动态数据源的Starter! 文章目录 手撸一个动态数据源的Starter! 前言 一.准备工作 1,演示 2,项目目录结构 3,POM文件 二.思路 三.编写代码 1,定义核心注解 Ds 2 ...

  8. SpringSecurity Oauth2 - 自定义 SpringBoot Starter 远程访问受限资源

    文章目录 1. 自定义 SpringBoot Starter 1. 统一的dependency管理 2. 对外暴露 properties 3. 实现自动装配 4. 指定自动配置类的路径 META-IN ...

  9. 实现Ant Design 自定义表单组件

    Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法 ...

最新文章

  1. VMware中Ubuntu系统不全屏问题
  2. SASS type-of 函数
  3. 【机器学习基础】时间序列基本概念
  4. ACL 2020 | 消除文本分类问题中歧视现象的研究
  5. python怎么获取lol皮肤名称_LOL手游免费皮肤获得方法 LOL手游皮肤怎么获得
  6. android开发仿原生联系人,android 仿IOS联系人列表
  7. mysql 数据舍取_mysql取舍索引
  8. jquery各历史版本下载地址
  9. 计算机专业基础 -- 数据结构入门与算法基础知识
  10. TCP header
  11. 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!
  12. matlab直线的程序,MATLAB|辅助直线绘制程序
  13. MySQL树结构查询所有叶子节点
  14. 芯片和计算机专业的关系,cpu是芯片吗?芯片和cpu是什么关系?
  15. win10电源设置选项无效--高级电源选项
  16. 【微信小程序毕业设计源代码】校园考勤打卡及作业管理小程序系统丨前后分离VUE[包运行成功]
  17. golang runtime源码阅读 channal实现
  18. MIT线性代数1806(35) 总复习
  19. 认识loadrunner及相关性能参数
  20. python多线程返回值问题重写Thread类的run方法

热门文章

  1. Datahub Python SDK入门手册
  2. jquery微博实例
  3. mysql5.5分别把这两个数据库同步到不同的从服务器
  4. 用户、组织结构、功能菜单、权限分配设计
  5. 难道计算机专业真的没落
  6. PowerDNS管理工具开发中学习到的DNS知识
  7. Windows Mobile 5 编程体验4
  8. 10月25日学习内容整理:数据操作:增加更新删除,单表查询操作
  9. Apache POI导出Excel
  10. C++/Qt 序列化操作