实现自定义Spring Boot Starter

news/2024/5/4 20:37:23/文章来源:https://blog.csdn.net/jike11231/article/details/128159308

实现自定义Spring Boot Starter

  • 一、原理
  • 二、实战
    • 1 自定义 Spring Boot Starter
      • 1.1 添加maven依赖
      • 1.2 属性类AuthorProperties
      • 1.3 自动配置类AuthorAutoConfiguration
      • 1.4 业务逻辑AuthorServer
      • 1.5 spring.factories
    • 2 测试自定义的 Spring Boot Starter
      • 2.1 新建module或者新建工程
      • 2.2 创建controller
      • 2.3 yml配置文件
      • 2.4 启动项目
      • 2.5 项目整体结构及源码

Spring Boot 可以省略众多的繁琐配置,它的众多 starter 可以说是功不可没。 Spring Boot默认定义了很多的starter(spring-boot-starter-xxx),这些starter的简化了很多烦琐的配置,通过引入各种 Spring Boot Starter 包可以快速搭建出一个项目的脚手架。常用的 starter 还有 spring-boot-starter-web、spring-boot-starter-test、spring-boot-starter-jdbc,相比于传统的 xml 配置可以说是大大减少了集成的工作量。不过也是不可能应付所有需求的,根据我们自己的业务,我们可以自定义 starter 来实现项目中复用度高的业务,让别的模块能很方便的引入使用。

一、原理

利用 starter 实现自动化配置只需要两个条件:maven 依赖和配置文件,这里简单介绍下starter 实现自动化配置的流程。
引入 maven 依赖实质上就是导入 jar 包,Spring Boot 项目启动的时候会找到 starter jar 包中的 resources/META-INF/spring.factories 文件,根据 spring.factories 文件中的配置,加载需要自动配置的类。
以 mybatis-spring-boot-starter 为例,其自动配置类之一如下:

@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class})
public class MybatisAutoConfiguration implements InitializingBean {...
}        

对 MybatisAutoConfiguration 中用到的注解的说明,参考如何实现自定义的 Spring Boot Starter
在这里插入图片描述
mybatis-spring-boot-starter 的 pom 文件引用了 mybatis-spring-boot-autoconfigure 依赖,其中的 spring.factories 文件配置如下:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration,\
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration

这样,便可以在 Spring Boot 项目启动的时候会加载 mybatis starter 中的 MybatisLanguageDriverAutoConfiguration 和 MybatisAutoConfiguration 类。

二、实战

首先实现自定义的 spring-boot-starter;其次,通过一个新的工程 来引入该 starter,测试自定义starter是否生效。

1 自定义 Spring Boot Starter

功能描述:此starter供使用时获取到配置文件的属性值,作为业务逻辑的参数实现相关功能。

1.1 添加maven依赖

这里说下artifactId的命名问题:Spring 官方 Starter 通常命名为 spring-boot-starter-{name},如 spring-boot-starter-web;非官方 Starter 命名应遵循{name}-spring-boot-starter的格式

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

1.2 属性类AuthorProperties

用于获取配置文件前缀为custom的value值

@ConfigurationProperties(prefix = "custom")
public class AuthorProperties {public static final String DEFAULT_AUTHOR = "zsh";public String author = DEFAULT_AUTHOR;public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}
}

1.3 自动配置类AuthorAutoConfiguration

@Configuration
@ConditionalOnClass({ AuthorServer.class })
@EnableConfigurationProperties(AuthorProperties.class)
public class AuthorAutoConfiguration {@Resourceprivate AuthorProperties authorProperties;@Bean@ConditionalOnMissingBean(AuthorServer.class)@ConditionalOnProperty(name = "custom.author.enabled", matchIfMissing = true)public AuthorServer authorResolver() {AuthorServer authorServer = new AuthorServer();authorServer.setAuthor(authorProperties.getAuthor());return authorServer;}
}

@ConditionalOnClass 表示有 ExampleService 类存在时执行。
@EnableConfigurationProperties 表示有 ExampleProperties 类存在时执行。
@ConditionalOnMissingBean 当 ExampleService Bean 缺失时,执行下段代码。
@ConditionalOnProperty 当 example.service.enabled = true 时,执行代码。

1.4 业务逻辑AuthorServer

public class AuthorServer {public String author;public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}
}

1.5 spring.factories

在 resources 目录下新建 META_INF 文件夹,并在其中新建 spring.factories,在其中写入:

# CUSTOM
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zsh.AuthorAutoConfiguration

至此,Starter 项目创建完成,使用 mvn install 命令打包。
在这里插入图片描述
出现BUILD SUCCESS代表打包成功!
在这里插入图片描述

2 测试自定义的 Spring Boot Starter

2.1 新建module或者新建工程

在pom文件中引入自定义的Spring Boot Starter

<dependency><groupId>com.zsh</groupId><artifactId>zsh-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

2.2 创建controller

@RestController
@RequestMapping("/userController")
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate AuthorServer authorServer;//获取自定义stater方法@RequestMapping("/author")String home() {return "发布者:"+ authorServer.getAuthor();}
}	

2.3 yml配置文件

custom:author: hello-worldenabled: true

2.4 启动项目

http请求结果如下,代表新工程调用自定义starter成功!

localhost:8086/userController/author

在这里插入图片描述

2.5 项目整体结构及源码

源码下载,欢迎star!SpringBoot2.XLearn
在这里插入图片描述
参考资料
springboot自定义和使用starter
【企业级解决方案一】编写一个自己的SpringBootStarter
springboot如何自定义starter
如何实现自定义的 Spring Boot Starter?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_229649.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Compose 动画艺术探索之动画规格

本篇文章是此专栏的第四篇文章&#xff0c;如果想阅读前三篇文章的话请点击下方链接&#xff1a; Compose 动画艺术探索之瞅下 Compose 的动画Compose 动画艺术探索之可见性动画Compose 动画艺术探索之属性动画 动画规格在上一篇文章中提到过&#xff0c;不过上一篇文章中说的…

[附源码]JAVA毕业设计教材管理(系统+LW)

[附源码]JAVA毕业设计教材管理&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xf…

ARM mkv210_image.c 文件详解

一、mkv210_image.c 的使用演示 裸机程序中的 Makefile&#xff08;实际上真正的项目的 Makefile 都是这样的&#xff09;是把程序的编译和链接过程分开的。&#xff08;平时我们用 gcc a.c -o exe 这种方式来编译时&#xff0c;实际上把编译和链接过程一步完成了。在内部实际…

[附源码]Python计算机毕业设计Django教学辅助系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

一文教会你如何在内网搭建一套属于自己小组的在线 API 文档?

Hello&#xff0c;大家好&#xff0c;我是阿粉&#xff0c;对接文档是每个开发人员不可避免都要写的&#xff0c;友好的文档可以大大的提升工作效率。 阿粉最近将项目的文档基于 Gitbook 和 Gitlab 的 Webhook 功能的在内网部署了一套实时的&#xff0c;使用起来特方便了。跟着…

[附源码]计算机毕业设计JAVA校园拓展活动管理系统

[附源码]计算机毕业设计JAVA校园拓展活动管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

什么是【固件】?

文章目录一、软件 硬件 固件二、BIOS&#xff08;Basic Input/output System&#xff09;三、百度百科的解释四、固件的工作原理五、应用六、参考链接一、软件 硬件 固件 通常我们会将硬件和软件分开看待&#xff0c;二者协同工作为我们提供计算机的体验。硬件是摸得着的实体&…

SpringBoot中使用MySQL存用户信息, 日志的使用

SpringBoot中使用MySQL存用户信息 UserController类 package com.tedu.secboot.controller; import com.tarena.mnmp.api.SendParam; import com.tedu.secboot.entity.User; import com.tedu.secboot.util.DBUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory;…

[附源码]计算机毕业设计springboot在线图书销售系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2023年天津天狮学院专升本市场营销专业《管理学》考试大纲

2023天津天狮学院高职升本科市场营销专业入学考试《管理学》考试大纲一、考试性质 《管理学》专业课程考试是天津天狮学院市场营销专业高职升本入学考试的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《管理学》考试大纲的编…

LIO-SAM源码解析(四):imuPreintegration.cpp

1. 代码流程 2. 功能说明 这个cpp文件主要有两个类&#xff0c;一个叫IMUPreintegration类&#xff0c;一个叫TransformFusion类。 现在我们分开讲&#xff0c;先说IMUPreintegration类。 关于IMU原始数据&#xff0c;送入imuhandle中&#xff1a; 2.1. imuhandle imu原始…

[附源码]Python计算机毕业设计Django景区直通车服务系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

【RTS】杜金房大神FreeSwitch分享笔记

技术万变不离其宗不管如何实现原理都是一样的。杜金房大神 RTS 高可用 一台机器上俩fs,公用同一个ip用户连接的是一个ip,不知道切了fs。两台主备数据同步

Ajax学习:同源策略(与跨域相关)ajax默认遵循同源策略

同源策略&#xff1a;是浏览器的一种安全策略 同源意味着&#xff1a;协议、域名、端口号必须相同 违背同源便是跨域 当前网页的url和ajax请求的目标资源的url必须协议、域名、端口号必须相同 比如&#xff1a;当前网页&#xff1a;协议http 域名 a.com 端口号8000 目标请求…

[附源码]JAVA毕业设计计算机在线学习管理系统-(系统+LW)

[附源码]JAVA毕业设计计算机在线学习管理系统-&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

阿里云安装mysql、nginx、redis

目录 安装mysql 安装nginx ​编辑安装redis 先看一下系统基本信息 安装mysql rpm -qa | grep mariadb 卸载mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 wget -i http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum -y install my…

【D3.js】1.17-给 D3 元素添加标签

title: 【D3.js】1.17-给 D3 元素添加标签 date: 2022-12-02 14:35 tags: [JavaScript,CSS,HTML,D3.js,SVG] 为了让图更易懂&#xff0c;我们给每一个rect添加上标签。 一、学习目标 如何添加text元素&#xff1f; .append(“text”) 如何设置text元素的值&#xff1f; .attr(…

在Linux中部署运维监控系统WGCLOUD

在公网IP为x.x.x.x&#xff0c;安装CentOS8或Alibaba Cloud Linux 3.2104 LTS 64位系统的服务器&#xff08;服务端&#xff09;上&#xff0c;先安装jdk8&#xff0c;然后安装数据库mariadb-10.5&#xff0c;最后进行server安装。 在需要监控的安装CentOS8或Alibaba Cloud L…

[附源码]计算机毕业设计springboot疫情网课管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

并发编程详解: 十三个工具类, 十大设计模式, 从理论基础到案例实战

前言 对于 Java 程序员而言&#xff0c;熟练掌握并发编程是判断其卓越性的重要标准之一。因为并发编程是 Java 语言中最晦涩的知识点&#xff0c;它涉及操作系统&#xff0c;内存&#xff0c;CPU&#xff0c;编程语言等的基本功&#xff0c;并且还测试了程序员的内功。 那么如…