springboot2.x基础教程:动手制作一个starter包

进阶篇-SpringBoot2.x自定义starter启动器 Spring Boot为我们提供了简化企业级开发绝大多数场景的starter pom【比如springb-boot-starter-web,springb-boot-starter-jdbc等】, 使用应用场景所需要的starter pom,只需要引入对应的starter,即可以得到Spring Boot为我们提供的自动配置的Bean。然而,可能在很多情况下,我们需要自定义stater,这样可以方便公司内部系统调用共同的配置模块的时候可以自动进行装载配置。 阅读详情

上一篇博客介绍了springboot自动装配的原理。springboot本身有丰富的spring-boot-starter-xx集成组件,这一篇趁热打铁加深理解,我们利用springboot自动装配的机制,制作一个属于自己的starter包。

制作一个starter包思路

​ 这一篇博客我制作一个上传图片第三方图床的starter,集成常见的第三方图床sm.ms、imgur、github图床等。

​ 本教程不会具体的讲解图床上传相关的代码,而是主要分析封装此starter的思路。

  1. 首先安装springboot第三方的starter规范命名:xx-spring-boot-starter,我们项目取名为imghost-spring-boot-starter。
  2. 对于图床相关的配置项,我们同样准备建立一个ImgHostProperties配置类存放。
  3. 同样我们也需要一个ImgHostAutoConfiguration,并且加上条件注解在某些情况下才会注入我们的工具类到IOC容器中。
  4. 按照规范在我们项目的META-INF/spring.factories文件下,指定我们starter的自动装配类。

项目结构一览

image-20200911224040555

Starter开发实例

引入必要的依赖

​ 这里主要引入spring-boot-starter包,spring-boot-configuration-processor其他依赖主要为上传到第三方图床发送Http请求依赖包。

<?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>vip.codehome</groupId>
	<artifactId>imghost-spring-boot-starter</artifactId>
	<version>1.0-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		      <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
                <scope>compile</scope>
            </dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-json</artifactId>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>3.14.9</version>
		</dependency>
	</dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/spring.factories</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!--把注释源码也打入基础包中-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

定义一个图床参数上传的配置类

​ 上传到SM.MS的API需要上传的token,在sm.ms网站注册获取个人的私钥,后面如果上传到imgur同样可以在此类中加入对应的配置类。

@Data
@ConfigurationProperties(prefix = "imghost")
public class ImgHostProperties {
    SMMS smms;
    @Data
    public static class SMMS{
        String token;
    }
}

定义上传服务AutoConfiguration类

当imghost.smms.token使用者配置时,我们生成一个SMMSImgHostService的图床上传服务类。

@Configuration
@EnableConfigurationProperties(ImgHostProperties.class)
@ConditionalOnProperty(prefix = "imghost",name = "enabled",havingValue = "true",matchIfMissing = true)
public class ImgHostAutoConfiguration {
	private final ImgHostProperties imgHostProperties;

	public ImgHostAutoConfiguration(ImgHostProperties imgHostProperties) {
		this.imgHostProperties = imgHostProperties;
	}

	@ConditionalOnMissingBean
	@ConditionalOnProperty(prefix="imghost.smms",name="token")
	@Bean
	public SMMSImgHostService imgHostService() {
		return new SMMSImgHostService(imgHostProperties);
	}
}

编写spring.factories

​ 最后在项目的src/main/resource上加入META-INF/spring.factories中引入我们自定义的ImgHostAutoConfiguration配置类。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=vip.codehome.imghost.ImgHostAutoConfiguration

如何使用

  1. 在使用的项目中引入我们的imghost-spring-boot-starter。
<dependency>
	<groupId>vip.codehome</groupId>
	<artifactId>imghost-spring-boot-starter</artifactId>
	<version>1.0-SNAPSHOT</version>
</dependency>
  1. 在springboot项目中加入如下配置
    image-20200911224308917

  2. 项目使用

	@Autowired
	SMMSImgHostService smms;
	public void upload() {
		System.out.println(smms.upload(newFile("D:\\test.jpg")));
	}

总结

​ 千里之行,始于足下。这里是SpringBoot教程系列第十八篇。以上就是我们自己动手制作一个starter包的全过程,是不是很简单。此项目在github可下载源码

​ 当前只是实现了上传到SM.MS图床,后期会逐渐迭代一个上传到sm.ms,imgur,github各种图床的通用工具类,敬请期待。如果觉得不错,点赞、评论、关注三连击

DrMOS电路仿真 将驱动电路与功率MOS集成化后既是DrMOS。把驱动芯片以及上下桥MOSFET封装在一起,这样每一相供电就有了单独的驱动芯片,并且这种高度整合的MOSFET可以通过更高的电流、发热比传统的MOSFET也小很多且更节能 自举升压同步BUCK高低侧栅驱动电路原理及仿真 ... 阅读详情

相关推荐

Keil5保姆级安装指南:从破解到STM32开发环境配置(附常见错误解决方案)

本文提供Keil5从安装到STM32开发环境配置的完整指南,包含破解步骤、常见错误解决方案及多芯片支持配置。详细讲解环境预检、核心安装、许可证管理及高效开发环境设置,帮助开发者快速搭建嵌入式开发平台。特别针对安装和卸载过程中的关键问题提供专业解决方案。

weixin_30369041的博客 124

springboot2.X版本自定义starter

1.创建空项目 hellospringbootstarter 2.创建 2个module 1.创建maven项目 hello-spring-boot-starter 作为启动starter 2.创建springboot项目 hello-spring-boot-stater-autoconfigurtion,自动配置项目 1.创建 HelloService 2.创建 HelloAutoConfigurtion...

u012939253的博客 848

CMap数据库实战:从基因表达谱到药物重定位的可视化分析

本文详细介绍了如何利用CMap数据库进行药物重定位的可视化分析。通过实战演示,从差异基因列表准备、CMap查询参数设置,到结果筛选与高级可视化(如热图与OncoPrint风格图),系统讲解了从数据到洞察的全流程,并提供了关键的解读与验证指南,帮助研究者高效挖掘老药新用的潜力。

mango的博客 589

如何将java项目打包并生成start.bat文件运行

1.首先将java项目打包成jar包,在生成jar包的时候需要注意,要指定main方法所在的类 2.编写一个start.bat执行文件 start.bat文件中的内容如下: java -classpath cxf-rt-ws-addr-2.5.1.jar;demiddleware.jar client.MuleClientTest 在这段内容中,需要把该java项目所用到的jar包都要引入...

iteye_10047的博客 643

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3224

避坑指南:Abaqus网格划分中90%用户会遇到的5个质量陷阱(附解决方案)

本文深入剖析Abaqus网格划分中90%用户会遇到的5个典型质量陷阱,包括单元扭曲、扫掠网格失败、尺寸梯度控制等,并提供工程级解决方案。通过Python脚本和虚拟拓扑等技巧,帮助用户提升网格质量,确保有限元分析结果的可靠性,适用于CAE工程师和仿真分析师。

weixin_29243279的博客 99

动手学习|如何创建自己的starter?

不错不错,自动配置简单原理明白了,也能写个starter了,说不定以后能写些东西让别人依赖一下(哈哈哈,开始做梦)。

BASK2311的博客 1381

Vivado IP核:AXI Uartlite的使用经验分享

1. IP基本设置 在Vivado中,打开IP Catalog,搜索“uart”: 双击“AXI Uartlite”,进入IP配置界面: 这里可以配置IP的具体参数,设置时钟频率、波特率等,完成后,生成IP即可。 2. IP的时序特点 点击下面的链接可以下载该IP核的官方指导文档: https://china.xilinx.com/support/documentation/ip_docume...

weixin_43265132的博客 1万+

使用SpringBoot自定义一个starter启动包,超详细,Java工作经验6年

看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱Java互联网工程师面试1000题。

2401_83947353的博客 663

保边滤波之Mean shift filter

保边滤波之Mean shift filter 目录 保边滤波之Mean shift filter 一、算法原理 二、练手实现的算法代码如下: 三、实现结果 一、算法原理 在OpenCV中,meanshift filter函数为 p...

大熊 1561

手把手教你学simulink(41.4)--逆变器电场景示例:基于Simulink的主从控制的多逆变器协同控制(Multi-Inverter Coordinated Control)

需求分析在现代电力系统中,分布式发电和储能系统的广泛应用使得多个逆变器并联运行成为常见的应用场景。为了确保多个逆变器之间的协同工作,实现系统的稳定性和高效性,通常采用主从控制(Master-Slave Control)策略。主从控制通过一个主控制器(Master)来协调多个从控制器(Slave),确保所有逆变器的输出电压、频率和功率分配符合预期目标。本项目将基于Simulink平台,开发一个多逆变器协同控制系统,采用主从控制策略,实现对多个逆变器的精确控制和优化。

MHD0815的博客 306

如何自定义一个starter,你学废了么?

你好,我是田哥前两天,一位朋友面试时又被问到了starter。我在给他做模拟面试时,我刻意强调了一下,一定要自己去动手写一个自定义starter,果然面试中被问到了。可能部分人没有经历过从Servlet到Spring MVC,如果经历过就知道那配置是相当的繁琐,于是后面除了个Spring Boot。学过Spring Boot的朋友应该知道,有句话用来形容Spring Boot:约定大于配置。为什...

田维常 592

30天入门 SAP BTP 开发系列之七:动手在 SAP BTP 上开发第一个 ABAP 程序

本教程从理论转向实践,指导如何在SAP BTP上创建首个ABAP程序。首先通过Booster向导在Trial账号中配置ABAP环境,需确保已启用Cloud Foundry并创建Space。成功创建ABAP实例后,使用ABAP Development Tool连接环境:下载服务密钥文件,导入工具获取连接URL,即可建立项目开始编码。教程提供了从环境搭建到开发工具配置的完整流程,帮助ABAP开发者快速上手BTP云开发。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1680

中upload依赖包_springboot2.x基础教程:动手制作一个starter包

制作一个starter包思路#​这一篇博客我制作一个上传图片第三方图床的starter,集成常见的第三方图床sm.ms、imgur、github图床等。​本教程不会具体的讲解图床上传相关的代码,而是主要分析封装此starter的思路。首先安装springboot第三方的starter规范命名:xx-spring-boot-starter,我们项目取名为imghost-spring-boot-sta...

weixin_39916511的博客 114

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

如何制作一个Netty的springboot-starter

一个开箱即用的Netty-springboot-starter,配置即可启动服务端或者客户端,内置多种协议,心跳,重连机制,通过注解编排自己的数据处理器

共勉 1170

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

springboot 之 Starter

一、springboot Starter简介 Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。 总结: 它整合了这个模块需要的依赖库; 提供对模块的配置项给使用者; 提供自动配置类对模块内的Bean进行自动装配 例如,在Maven的依赖中加入spring-boot-

mazhongjia的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

实现一个springboot-starter

springboot-starter自己实现一个 1.springboot的优势 创建spring项目简单 web项目自带tomcat starter简化构建依赖配置 自动配置(就是设置了默认值) 零xml配置 2.starter的作用 引入jar包 完成bean的配置(通过配置文件完成约束) 3.几个重要的注解 4.自己实现一个自动装配的redis-starter 收到 ...

小老虎 473

【案例实战】SpringBoot3.x自定义封装starter实战

SpringBoot3.x自定义封装starter实战

互联网小阿祥 3790

SpringBoot:封装 starter

SpringBoot:封装 starter

weixin_46619605的博客 1055

SpringBoot 自定义 Starter:从零开发一个私有 Starter

用过 SpringBoot 的都知道,引入一个 starter(比如 spring-boot-starter-web、spring-boot-starter-redis),就能实现开箱即用,不用手动配置。答:SpringBoot 启动时,会通过 SpringFactoriesLoader 工具类,读取 classpath 下 META-INF/spring.factories 文件,该文件中配置了自动配置类的全类名,SpringBoot 会加载这些自动配置类,结合条件注解筛选后,注入对应的 Bean。

。。。 1164

手写SpringBoot Starter(二):手把手教你写第一个Starter,原来这么简单!

手把手实现Starter。步骤:建项目简化结构,配pom仅需核心依赖,写四组件:业务类、配置类、自动配置类、注册文件。关键注解:Configuration、Bean、ConditionalOnMissingBean实现自动注册和覆盖。打包后测试项目引依赖即用。详解注解作用、排查方案、验证配置和覆盖功能。

比较是偷走幸福的小偷 1万+

SpringBoot第二特性:Starter启动依赖_01_自己动手写一个Starter组件

文章目录一、前言二、自己动手写一个Starter组件2.1 新建组件类2.2 配置类和配置属性类2.3 完成统一格式,resources目录三、使用者3.1 新建使用者类3.2 使用者导入依赖3.3 使用者HelloController.java3.4 使用者application.properties配置文件要配置好四、启动redis,运行成功4.1 直接用windows 上安装使用redis4.2 操作成功4.3 使用者application.properties没有提示如何解决?4.4 整个组件的方方

毛毛的专栏 1844

springboot2.x打war包部署tongweb(东方通)

springboot2.x打war包部署tongweb(东方通) 环境:IDEA2018.2.5,jdk1.8.0_191,maven3.6.1,tomcat8.5.34,tongweb6.1,springboot2.1.4 tongweb的出错日志(我只截取核心异常了) java.lang.NoClassDefFoundError: javax/el/ELManager 放...

weixin_38854096的博客 1万+

自己动手写一个 Spring Boot Starter,其实没那么神秘

本文通过一个最小示例,从结构拆分到自动配置落地,完整梳理了 Spring Boot Starter 的设计思路与实现流程,帮助开发者理解“引入依赖即可生效”背后的自动配置机制。

稳扎稳打,持续进步 932

SpringBoot 3.x版本自定义starter

SpringBoot自定义starter

qq_41973850的博客 852

springboot3.x入门系列【2】自定义springboot starter

Spring Boot Starter是一系列约定的集合,它通过提供预定义的配置和依赖管理,简化了Spring应用的搭建和开发过程,自定义Starter使得开发者能够封装特定的业务逻辑或技术实现,创建可重用的模块。这不仅有助于减少重复代码,还能确保配置的最佳实践。整体目录├── x86-framework-dependencies 公共依赖(版本管理)├── x86-framework-core 核心工具├── x86-framework-starter 模块starter。

qq_20467517的博客 1123
上一篇: springboot2.x基础教程:自动装配原理与条件注解源码分析
下一篇: Idea没安装几款好用的插件,怎么风骚的写代码???
程序员众推
博客等级 码龄10年 8粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员众推

谢谢老铁鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值