SpringBoot-自定义Starter精华版

2024-04-13 06:44

本文主要是介绍SpringBoot-自定义Starter精华版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SpringBoot自定义Starter精华版

一、自定义 Starter 分析

项目首先加载 starter,starter加载自动配置类,然后再通过配置绑定对象读取配置属性,注册组件。

在这里插入图片描述

二、实现步骤

开发的自定义 Starter 需求是,项目依赖starterTest-spring-boot-starter,starterTest-spring-boot-starter 又加载HelloAutoConfiguration,HelloAutoConfiguration自动产生HelloService,项目中引入 starterTest-springboot-start后,用户便可以使用HelloAutoConfiguration 产生的 HelloService 了

1、配置POM文件

引入spring-boot-configuration-processor依赖

spring-boot-configuration-processor 依赖是 Spring Boot 提供的一个注解处理器,主要用于生成配置类的元数据信息,以支持 IDE 的自动补全和代码提示功能。

具体来说,spring-boot-configuration-processor 依赖的作用包括:

  1. 生成 application.propertiesapplication.yml 文件的元数据信息

    • 当你使用 @ConfigurationProperties 注解来绑定配置属性时,通常需要在 IDE 中能够自动补全和提示这些属性的名称、类型和描述信息spring-boot-configuration-processor 会扫描你的配置类,并生成相应的元数据信息,供 IDE 使用
  2. 提供编译时错误检查

    • 使用 spring-boot-configuration-processor 可以在编译时检查配置属性的正确性,比如属性名称拼写错误、类型不匹配等。这有助于提早发现并修复配置错误,减少运行时的问题。
  3. 提高开发效率

    • 通过生成配置属性的元数据信息,开发者可以在 IDE 中获得更好的开发体验,包括自动补全、代码提示、快速导航等功能,从而提高开发效率。

    综上所述,spring-boot-configuration-processor 依赖的主要作用是提供配置属性的元数据信息,以支持 IDE 的自动补全和代码提示功能,同时提供编译时的错误检查,帮助开发者更快地开发和调试 Spring Boot 应用程序。

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.kdz</groupId><artifactId>starterTest-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version><name>starterTest</name><description>starterTest</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version><optional>true</optional></dependency></dependencies>
</project>

2、配置XXXProperties属性绑定对象

在自动配置类中使用配置绑定对象 HelloProperties 读取 com.kdz 前缀的配置参数,提供给自动配置类产生的 HelloService 使用,代码如下。

package com.kdz.demo.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "con.kdz")
@Data
public class HelloProperties {private String name;private String message;}

@ConfigurationProperties 注解用于将外部配置文件中的属性值绑定到 Spring Boot 应用程序中的 JavaBean 类的属性上。

3、配置XXXServiceAutoConfiguration对象

在自动配置 HelloServiceAutoConfiguration 类中会自动产生 HelloService,这样引入了 starterTest-spring-boot-starter 场景启动器的 Spring Boot 工程就都可以使用HelloService 了,代码如下:

package com.kdz.demo.config;import com.kdz.demo.service.HelloService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {@ConditionalOnMissingBean(HelloService.class)@Beanpublic HelloService helloService(){HelloService helloService = new HelloService();return helloService;}
}

@Configuration

  • 说明:该注解标记一个类作为配置类,指示 Spring 应用程序应该在启动时加载并处理其 bean 定义
  • 使用场景:通常用于标记自动配置类,以确保 Spring 在启动时加载这些配置

@ConditionalOnMissingBean

  • 说明:与 @ConditionalOnBean 相反,该注解根据 Spring 容器中是否缺少某个特定的 bean 来条件化地应用自动配置
  • 使用场景:当你的 Starter 需要确保某个 bean 尚未被定义时才生效时,可以使用此注解。

@ConditionalOnBean

  • 说明:该注解根据 Spring 容器中是否存在某个特定的 bean 来条件化地应用自动配置
  • 使用场景:当你的 Starter 需要某个 bean 已经被其他 Starter 或用户配置定义时才生效时,可以使用此注解

@EnableConfigurationProperties

  • @EnableConfigurationProperties 注解的作用是启用指定的 @ConfigurationProperties 注解标记的类,从而将其加载到 Spring 应用程序的上下文中,并使其可用于注入到其他组件中。

4、配置XXXService 类

自动配置类产生的 HelloService 代码如下:

package com.kdz.demo.service;import com.kdz.demo.config.HelloProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class HelloService {@AutowiredHelloProperties helloProperties;public String sayHello(String name,String message){return name+message;}
}

5、META-INF/spring.factories 文件

自动配置类需要配置在META-INF/spring.factories,具体代码如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.kdz.demo.config.HelloServiceAutoConfiguration

META-INF/spring.factories 文件在 Spring Boot 自动配置中扮演着重要的角色。它的作用主要体现在以下几个方面:

  1. 自动配置的注册

    • META-INF/spring.factories 文件是 Spring Boot 自动配置的核心配置文件之一。在这个文件中,通过指定特定的键值对形式,可以注册自动配置类。Spring Boot 在启动时会扫描这个文件,加载其中的配置,从而自动注册这些配置类到应用程序的上下文中。
  2. 指定自动配置类的位置

    • META-INF/spring.factories 文件中,通过指定 org.springframework.boot.autoconfigure.EnableAutoConfiguration 键下的值,可以告诉 Spring Boot 在启动时自动加载并应用相应的自动配置类。这些自动配置类通常包含了对应用程序进行默认配置的逻辑,比如加载默认的数据源、配置默认的日志输出等。
  3. 扩展点

    • 开发者可以在自己的项目中创建自定义的自动配置类,并将其注册到 META-INF/spring.factories 文件中。这样,这些自定义的自动配置类就可以在应用程序启动时被自动加载和应用,从而实现项目的定制化配置
  4. 模块化管理

    • Spring Boot 框架本身也使用 META-INF/spring.factories 文件来管理自身的模块和自动配置。在 Spring Boot 的依赖中,不同模块的自动配置类会分别注册到 spring.factories 文件中的不同位置,从而实现模块化管理和灵活组合

    综上所述,META-INF/spring.factories 文件在 Spring Boot 自动配置中起着关键的作用,通过这个文件可以注册和加载自动配置类,实现应用程序的默认配置和定制化配置

6、安装自定义starter到本地maven仓库

1)方法一:IDEA的maven插件安装

当自定义starter配置好后,直接使用IDEA的maven插件安装,点击install,即可

在这里插入图片描述

在这里插入图片描述

方法二、cmd+maven命令安装
 mvn install:install-file -DgroupId=com.kdz -DartifactId=starterTest-spring-boot-starter -Dversion=0.0.1 -Dfile=E:/Code/SpringBoot/starterTest/starterTest-spring-boot-starter-0.0.1-SNAPSHOT.jar -Dpackaging=jar

在这里插入图片描述

方法三:IDE的控制台+maven命令安装
参数:-Dfile  jar包在本地实际位置的绝对路径-DgroupId   jar包的groupId,也对应打包后想要生成的目录-DartifactId    jar包的artifactId,名称随意即可-Dversion   jar包的版本号,对应即可-Dpackaging 指定打包成jar包形式

在这里插入图片描述

 mvn install:install-file -DgroupId="com.kdz" -DartifactId="starterTest-spring-boot-starter" -Dversion="0.0.1" -Dfile="E:/Code/SpringBoot/starterTest/starterTest-spring-boot-starter-0.0.1-SNAPSHOT.jar" -Dpackaging=jar

注意:-Dfile-DgroupId-DartifactId-Dversion的值,最好都带上引号,因为空格、-、.等符号都会截断后面的值,比如:starterTest-spring-boot-starter可能只有starterTest

在这里插入图片描述

三、使用自定义的starter

在另外一个项目的POM文件中,引用依赖自定义的starter使用即可

在这里插入图片描述

能够索引到依赖,有提示,即可以使用了

在这里插入图片描述

至此SpringBoot自定义Starter精华版完结

这篇关于SpringBoot-自定义Starter精华版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899403

相关文章

SpringBoot基于沙箱环境实现支付宝支付教程

《SpringBoot基于沙箱环境实现支付宝支付教程》本文介绍了如何使用支付宝沙箱环境进行开发测试,包括沙箱环境的介绍、准备步骤、在SpringBoot项目中结合支付宝沙箱进行支付接口的实现与测试... 目录一、支付宝沙箱环境介绍二、沙箱环境准备2.1 注册入驻支付宝开放平台2.2 配置沙箱环境2.3 沙箱

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://