SpringBoot 2.7.8 自定义 Starter 自动配置

news2025/2/23 17:50:37

文章目录

  • SpringBoot 2.7.8 自定义 Starter
    • 前言
    • 本次练习的代码仓库
    • 代码简要说明
      • custom-springboot-starter-demo 的pom文件
      • customer-starter 的pom文件
      • test 的pom文件
      • 配置类
      • 配置信息

SpringBoot 2.7.8 自定义 Starter

前言

前段时间,SpringBoot 出 3.x 版本了。听说把自动配置给刀了!!(3.x版本不再使用 spring.factories做自动配置)

但是这个在真正开始说要弃用,是在 2.7版本。只是向下兼容了 spring.factories 的配置方式。

也就是说两种写法共存,如下图:

在这里插入图片描述

META-INF 目录下增加了 spring 目录,其中有文件 org.springframework.boot.autoconfigure.AutoConfiguration.imports

文件内容是配置类的完整类名。

比如我当前使用的配置内容是:

org.feng.config.AppInfoConfiguration

而 spring.factories 中的配置内容和之前一致:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.feng.config.AppInfoConfiguration

这一点其实也可以从 Spring 的源码包中看到:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KpUrS3DZ-1675309227078)(docs\20230202111302.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yCkQDhOr-1675309227079)(docs\20230202111335.png)]

本次练习的代码仓库

https://gitee.com/fengsoshuai/custom-springboot-starter-demo.git

代码简要说明

模块说明
customer-starter自定义的 starter,并提供配置、示例接口&实现类
test测试自定义starter,引入自定义starter的依赖,并定义了启动类,控制器类

custom-springboot-starter-demo 的pom文件

主要定义了 SpringBoot的版本。

<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>org.example</groupId>
  <artifactId>custom-springboot-starter-demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>custom-springboot-starter-demo</name>
  <url>http://maven.apache.org</url>
  <modules>
    <module>custom-starter</module>
    <module>test</module>
  </modules>

  <properties>
    <java.version>11</java.version>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <springboot.dependencies.version>2.7.8</springboot.dependencies.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${springboot.dependencies.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <configuration>
            <source>11</source>
            <target>11</target>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

customer-starter 的pom文件

<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>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>custom-springboot-starter-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>custom-starter</artifactId>
    <packaging>jar</packaging>

    <name>custom-starter</name>
    <url>http://maven.apache.org</url>

    <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>
    </dependencies>

    <build>
        <!-- 将自定义starter中的默认配置文件也打包 -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.yaml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

test 的pom文件

<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>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>custom-springboot-starter-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>test</artifactId>
    <packaging>jar</packaging>

    <name>test</name>
    <url>http://maven.apache.org</url>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.example</groupId>
            <artifactId>custom-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

配置类

package org.feng.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;

/**
 * 自动配置类:在META-INF中不做配置时,会抛出警告 <code>Application context not configured for this file</code>
 *
 * @version V1.0
 * @author: fengjinsong
 * @date: 2023年02月02日 10时03分
 */
@AutoConfiguration
public class AppInfoConfiguration {
    @Value("${app.url.baiDu}")
    private String baiDuUrl;

    public String getBaiDuUrl() {
        return baiDuUrl;
    }

    public void setBaiDuUrl(String baiDuUrl) {
        this.baiDuUrl = baiDuUrl;
    }

    @Bean
    public AppUrl generateAppUrl() {
        AppUrl appUrl = new AppUrl();
        appUrl.setBaidu(baiDuUrl);
        return appUrl;
    }
}

配置信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mLH3xC7f-1675309227079)(docs\20230202113605.png)]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何与他人交流 (如何跟老板提涨工资) 第16章

最重要的事情 ---强有力的论证上期我们说根据场景来优化策略,是在隔靴搔痒,然而一个容易给出理由的人很容易成为演讲的高手.说服别人的理性与感性举个例子&#xff0c;我们如果说服别人买一件商品。采用打广告的形式&#xff0c;往往有两种途径。比如说我们要买一辆车。展示它的…

Power BI瀑布图

瀑布图&#xff08;Waterfall Plot&#xff09;也被称为阶梯图&#xff0c;它出现的历史并不长&#xff0c;最初为麦肯锡所创&#xff0c;因自上而下形似瀑布而得名&#xff0c;面世之后以其展示效果清晰而流畅被广为接受&#xff0c;经常在经营和财务分析中使用。 瀑布图是根…

4d view软件 .vol .4dv转 dcom文件

一、 .vol转 dcom文件 1、4d view软件打开vol文件 2、settings--dicom configuration-add&#xff0c;设置如下&#xff08;前面的alias、ae title等设的可以随便一些&#xff0c;我都设了1&#xff09;&#xff0c;然后save&exit&#xff08;第6步设置也可以&#xff09…

Vue13-计算属性computed

首先使用methods方法实现属性计算 步入正题&#xff1a; 计算属性&#xff1a;拿已有的属性计算得出新的属性 1.vue中属性和计算属性是分开的&#xff0c;属性在data中&#xff0c;计算属性在computed中 computed中计算属性以对象的形式存贮 这里是将fullName以及get的返回值…

计算机网络基础学习指南(一)

前言 计算机网络基础是研发/运维工程师都需掌握的知识&#xff0c;但往往会被忽略。 今天&#xff0c;我将献上一份详细 & 清晰的计算机网络基础学习指南&#xff0c;涵盖 TCP / UDP协议、Http协议、Socket等&#xff0c;希望你们会喜欢。 1. 计算机网络体系结构 1.1 简…

深入理解ThreadLocal看这篇就够了-应用场景、内部原理、内存泄漏以及父子线程如何共享数据

为了帮助大家在项目中更好使用ThreadLocal&#xff0c;本文向大家介绍ThreadLocal原理和常见问题&#xff0c;具体内容如下&#xff1a;ThreadLocal是什么ThreadLocal的应用场景ThreadLocal的内部原理ThreadLocal内存泄露问题父子线程如何共享数据ThreadLocal是什么java.lang.T…

CCS10新建TMS320F28335工程

CCS10新建TMS320F28335工程 1. 新建工程 点击Project → New CCS Project。选择芯片类型(TMS320F28335)、仿真器类型(XDS200V3)、新建工程名称、选择新建一个空工程。 2. 配置工程选项 右键项目工程名&#xff0c;进入配置选项Proprrties。或者AltEnter打开配置选项。在工程…

gd32f103vbt6 串口OTA升级-问题记录-2-平衡OTA弊端

走在路上的时候&#xff0c;我想起了这个OTA的弊端&#xff0c;那我想有没有办法解决呢&#xff1f;其实是有的。 那就是我还是把app程序放在flash的最开始的位置&#xff0c;而把OTA的程序放到后面&#xff08;flash的最后12k&#xff09;去。 这样也带来新的弊端&#xff1…

PMP考试技巧PMP考试大纲

一&#xff0c;PMP解题策略 PMP考试默认条件 精准审题 E(Eye):找到题眼&#xff1b; K(Key):找到考点&#xff1b; C(Choice):确定 选项&#xff1b; 情景结合 基本知识从PMI的角度出发&#xff0c;按PMI的思维方式&#xff0c;项目经理应该做出什么决定&#xff1b; 选…

SpringBoot自定义全局异常处理

自定义全局异常处理一. 创建所需类1. 自定义异常接口2. 自定义枚举类3. 自定义异常类4. 自定义异常处理类5. 自定义全局响应类5.1 BaseResponse类5.2 RespGenerator类二. 效果演示我们在 SpringBoot 项目中&#xff0c;往往会写许多 Controler 接口类&#xff0c;由于 Controll…

SNV的使用

一&#xff1a;什么是SVN&#xff1f; SVN是一个版本控制系统&#xff0c;SVN全称Subversion&#xff0c;用于记录一个或多个文件内容变化&#xff0c;方便我们查阅特定版本的修改情况。以前在没有版本控制的时候&#xff0c;我们通常在项目根目录下这样命名项目&#xff1a;p…

Python 环境搭建配置

Python可应用于多平台包括 Linux 和 Mac OS X。你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个…

微信小程序 Springboot校园达达互助平台快递代取系统 java

本 录 摘 要 III Abstract 1 1 系统概述 1 1.1 概述 2 1.2课题意义 3 1.3 主要内容 4 2 系统开发环境 5 2.1微信开发者工具 6 2.2小程序框架以及目录结构介绍 6 2.3 JAVA简介 7 2.4 MySQL数据库 7 3 需求分析 8 3.1 系统设计目标 8 3…

STM32开发(1)----stm32f103c6t6开发板介绍和环境搭建

stm32f103c6t6开发板介绍一、stm32f103c6t6芯片资源介绍STM32 的命名规则二、最小系统开发板介绍三、开发板基本使用方法软件安装MDK5 安装安装STM32芯片包安装licenseUSB转串口驱动安装四、本文小结一、stm32f103c6t6芯片资源介绍 stm32f103c6t6 是一款基于 ARM Cortex M3 内…

测试岗外包4年终上岸,这段日子说起来都是泪啊

昨天一个老哥找到我倾诉&#xff0c;他干了好几年外包&#xff0c;现在通过自己的努力应聘上了阿里测试开发&#xff0c;虽然只是P6&#xff0c;但也属实不容易了。这位老哥是湖南长沙毕业的&#xff0c;计算机专业&#xff0c;二流本科。长沙&#xff0c;湖南省会&#xff0c;…

Python图像合成与视频倒放

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、视频抓帧二、图像转换1&#xff0c;图像翻转2&#xff0c;图像文件倒序三、倒序视频合成四、图像截取拓展任务——动态图合成与倒放1&#xff0c;gif动态图生…

面了个阿里拿28k跳槽出来的,真正见识到了跳槽天花板

2022年已经结束了&#xff0c;迎来的是2023崭新的一年&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备金三银四的面试计划。 作为一个入职5年的老人家&#xff0c;目前工资比较乐观&#xff0c;但是我还是会选择跳槽&#xff0c;因为感觉…

MySQL表中的联合查询

上一篇有关聚合查询的博客:MySQL表中的聚合查询_徐憨憨&#xff01;的博客-CSDN博客主要是针对单个表进行查询操作,但是实际的开发环境中,数据往往来自己于不同的数据表,此时就需要使用联合查询进行操作!联合查询多表查询的基本执行过程:进行笛卡尔积然后设置条件删除无效数据进…

Echarts环形图线性渐变,hover后显示阴影

第004个点击查看专栏目录Echarts的渐变在上一篇文章中已经讲过 ECharts线性渐变色示例演示&#xff08;2种渐变方式&#xff09;&#xff0c;这里做了环形图&#xff0c;饼图的一个渐变示例演示&#xff0c;hover到元素后&#xff0c;会呈现出一个阴影。注意&#xff0c;颜色属…

年度总结 | 积跬步以至千里,2023一起筑梦新征程

2022年&#xff0c;是值得载入史册的一年。疫情开放&#xff0c;健康码隐入历史尘埃。国际形势紧张&#xff0c;信创化进入快车道。企业加速转型&#xff0c;跨界技术融合的运维新生态已初露苗头。回顾2022&#xff0c;我们聚沙成塔逆寒流而勇进&#xff0c;精造创新以实践诠释…