玩转SpringBoot原理:掌握核心技术,成为高级开发者
创始人
2025-05-30 09:14:17
0

本文通过编写一个自定义starter来学习springboot的底层原理,帮助我们更好的使用springboot集成第三方插件

  • 步骤一:创建项目
  • 步骤二:添加依赖
  • 步骤三:创建自动配置类
  • 步骤四:创建属性类
  • 步骤五:创建服务类
  • 步骤六:添加自动配置类到Springboot自动配置列表中
  • 步骤七:打包并发布
  • 步骤八:在其他项目中使用自定义starter
  • 结论

步骤一:创建项目

世界上最伟大的成就,不是从不失败,
而是每次失败后,仍能振作起来。

首先,我们需要创建一个Springboot项目。删除启动类,配置文件,添加META-INF文件夹和spring.factories,最终项目结构如下

步骤二:添加依赖

在创建完项目后,我们需要在pom.xml文件中添加以下三个依赖:

org.springframework.bootspring-boot-starter
org.springframework.bootspring-boot-autoconfigure
org.springframework.bootspring-boot-configuration-processor2.7.0true

第一个依赖是Springboot的starter依赖,第二个依赖是Springboot的自动配置依赖。第三个是自动生成帮助文档和元数据,以帮助IDE自动完成和参数提示。

步骤三:创建自动配置类

当你感到疲惫时,不要停下脚步,
因为你不知道,下一步可能就是成功。

自动配置类是整个自定义starter的核心部分。我们需要在自动配置类中完成以下任务:

  • 使用@Configuration注解将该类标记为配置类。
  • 使用@EnableConfigurationProperties注解引入属性配置类。
  • 使用@Bean注解将自定义服务类注入到Spring容器中。

下面是一个示例代码:

@Configuration
@EnableConfigurationProperties(YoulaiProperties.class)
public class YoulaiAutoConfiguration {private final YoulaiProperties properties;public YoulaiAutoConfiguration(YoulaiProperties properties) {this.properties = properties;}@Beanpublic YoulaiService myService() {return new YoulaiService(properties.toString());}
}

步骤四:创建属性类

光阴似箭,日月如梭,生命短暂而珍贵,
让我们在有生之年做自己想做的事情。

属性类用来存储自定义的配置属性。我们需要在属性类中完成以下任务:

  • 使用@ConfigurationProperties注解将该类标记为属性类。
  • 使用prefix属性指定属性名前缀。
  • 定义对应的属性字段,并提供gettersetter方法。

下面是一个示例代码:

@Component
@ConfigurationProperties(prefix = "youlai")
public class YoulaiProperties {private String bio = "youlai-mall 是基于Spring Boot 2.7、Spring Cloud 2021 & Alibaba 2021、Vue3、Element-Plus、uni-app等全栈主流技术栈构建的开源商城项目,涉及 后端微服务、 前端管理、 微信小程序和 APP应用等多端的开发。";private String serverPath="https://admin.youlai.tech/#/login?redirect=/dashboard";private String apiPath="https://api.youlai.tech/doc.html#/home";public String getBio() {return bio;}public void setBio(String bio) {this.bio = bio;}public String getServerPath() {return serverPath;}public void setServerPath(String serverPath) {this.serverPath = serverPath;}public String getApiPath() {return apiPath;}public void setApiPath(String apiPath) {this.apiPath = apiPath;}@Overridepublic String toString() {return "YoulaiProperties{" +"bio='" + bio + '\'' +", serverPath='" + serverPath + '\'' +", apiPath='" + apiPath + '\'' +'}';}
}

步骤五:创建服务类

服务类是自定义starter提供的服务。我们需要在服务类中定义服务方法,提供的服务。我这演示读取配置文件

下面是示例代码:


public class YoulaiService {private String config;public YoulaiService(String config) {this.config = config;}public void doSomething() {System.out.println("Config value is: " + config);}
}

步骤六:添加自动配置类到Springboot自动配置列表中

为了让Springboot能够自动配置我们的starter,我们需要将自动配置类添加到META-INF/spring.factories文件中,springboot启动会读取这个文件,并将他注入到spring的容器中,如下所示:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.youlai.springbootstarter.YoulaiAutoConfiguration

除了这种自动装配,还有一种被动装配,由使用方决定是否需要装配,这种只需要定义一个注解就好了

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(YoulaiAutoConfiguration.class)
public @interface EnableYoulai {
}

步骤七:打包并发布

完成以上步骤后,我们可以使用Idea将项目打包并发布到Maven仓库中,我这里演示打包到本地

步骤八:在其他项目中使用自定义starter

成功不是偶然的,而是你日复一日努力的结果,
永远不要放弃自己的梦想。

在其他Springboot项目中,我们只需要在pom.xml文件中添加以下依赖即可:


com.youlai-learing
youlai-spring-boot-starter
0.0.1-SNAPSHOT

如果是被动装配,则在启动类加上开启注解:

@SpringBootApplication
@EnableYoulai
public class SpringbootStarterConsumerApplication {public static void main(String[] args) {SpringApplication.run(SpringbootStarterConsumerApplication.class, args);}}

然后就可以在代码中使用我们在自定义starter中提供的服务了,如下所示:

      @Resourceprivate YoulaiService youlaiService;@Testvoid contextLoads() {youlaiService.doSomething();}

完整代码地址:https://gitee.com/youlaiorg/youlai-learning.git

结论

通过本文的介绍,我们学习到如何编写Springboot自定义starter,并且清楚了springboot自动装配的原理

把握当下,不留遗憾,珍惜身边人,
感恩生命中的每一个瞬间。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...