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

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析