千家信息网

手撸一个SpringBoot的Starter,简单易上手

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,前言:今天介绍一SpringBoot的Starter,并手写一个自己的Starter,在SpringBoot项目中,有各种的Starter提供给开发者使用,Starter则提供各种API,这样使开发S
千家信息网最后更新 2026年11月01日手撸一个SpringBoot的Starter,简单易上手

前言:今天介绍一SpringBoot的Starter,并手写一个自己的Starter,在SpringBoot项目中,有各种的Starter提供给开发者使用,Starter则提供各种API,这样使开发SpringBoot项目变得简单。实际上Starter简单来说就是Spring+SpringMVC开发的。话不多说开始撸代码

1.创建项目

首先在idea中创建SpringBoot项目,并首先创建一个BeautyProperties类,代码代码如下:

package com.mystarter;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "beauty")public class BeautyProperties {    private String name;    private Integer age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }}
  • @ConfigurationProperties(prefix = "beauty")注解表示,在resource目录下的application.properties文件中定义的变量的以beauty前缀的变量值映射到这个类中,给这个对象赋值
  • 其中这个XXProperties类,若是由阅读过SpringBoot源码的程序员都知道,在SpringBooot的源码中Starter有各种的XXProperties类与.properties文件相对应
  • 如图所示所有的自动配置相关的都在spring-boot-autoconfigure这个jar包下。其中就列举了两个RabbitProperties、BatchProperties等的配置类
  • 点进RabbitProperties这个类中去看,代码如下,只粘贴一部分,这个类中也是使用@ConfigurationProperties注解将配置文件中的值与此类中的属性值相映射,目的就是为了给这些属性赋值
  • 这里留一个问题,大佬们就自己去寻找答案吧?就是那些与这些类相映射的文件在哪里呢?自行百度哈
    @ConfigurationProperties(prefix = "spring.rabbitmq")public class RabbitProperties {private String host = "localhost";private int port = 5672;private String username = "guest";private String password = "guest";private final RabbitProperties.Ssl ssl = new RabbitProperties.Ssl();private String virtualHost;private String addresses;
  • 然后再创建一个ActionService类,这个类没什么好说的了,代码如下:
    package com.mystarter;

public class ActionService {

private String name;private Integer age;public String sayHello() {    return "my name is "+ name +",I am "+ age +" years old";}public Integer getAge() {    return age;}public void setAge(Integer age) {    this.age = age;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}

}

 - 最后再创建一个类ActionServiceAutoConfiguration,这个类是重点,代码如下: - @Configuration注解表明这是一个配置类 - @EnableConfigurationProperties(BeautyProperties.class)表明开启@ConfigurationProperties这个注解,使这个注解生效 - @ConditionalOnClass(ActionService.class)条件判断注解,表明有这个类ActionService,条件才生效,即配置才生效。 - 通过@Autowired将BeautyProperties 类自动注入IOC容器中 - @Bean将返回的值注入到容器中

package com.mystarter;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration@EnableConfigurationProperties(BeautyProperties.class)
br/>@EnableConfigurationProperties(BeautyProperties.class)

public class ActionServiceAutoConfiguration {

@AutowiredBeautyProperties beautyProperties;@BeanActionService helloService() {    ActionService helloService = new ActionService();    helloService.setName(beautyProperties.getName());    helloService.setAge(beautyProperties.getAge());    return helloService;}

}

 - 然后再resources文件夹下的application.properties文件中,加入如下配置,作为使用这个Starter时候,没有设置相关值的时候作为默认值注入到配置类中

beauty.name=李依依默认
beauty.age=18

 - 最后再resources中新建一个META-INF文件夹,然后在新建一个文件spring.factories,这个名字和文件夹的名字不能改,加入配置如下,这个表明指定自动配置的类的全路径,自动配置的时候就找到这个全路径,实例化这个对象到容器中

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.mystarter.ActionServiceAutoConfiguration

 - 最后一步点击install,出现Build Success说明这个Starter已经安装到本地maven仓库中,可以被别人引用![在这里插入图片描述](https://img-blog.csdnimg.cn/20191218230620617.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjU1MDE3,size_16,color_FFFFFF,t_70)## 2.测试Starter新建一个SpringBoot工程,在application.properties的文件中加入如下配置:

beauty.name=李依依
beauty.age=24

在pom文件中引入依赖,如下:


com.org.ldc
mystarter
1.0-SNAPSHOT

然后测试,如下代码

package com.org.ldc.mystarter;

import com.mystarter.HelloService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
class TestmystarterApplicationTests {

@AutowiredHelloService helloService;@Testpublic void contextLoads() {    System.out.println(helloService.sayHello());}

}

执行测试,出现如下,说明创建成功![在这里插入图片描述](https://img-blog.csdnimg.cn/2019121823094633.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjU1MDE3,size_16,color_FFFFFF,t_70)>更多的教程请关注:非科班的科班,路过有空的大佬们点个赞,谢谢大家
文件 配置 代码 注解 项目 容器 就是 文件夹 时候 开发 测试 名字 图片 对象 属性 条件 源码 科班 路径 李依依 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 金融科技还是互联网 互联网巨头反垄断金融科技 深圳互联网络科技有限公司 互联网科技英文 万达互联网科技 新华互联网科技2019 互联网大会黑科技排名 栖莱科技互联网股份有限公司 青岛科技大学互联网大赛研究生 健康食品互联网创新科技园项目 华夏恒生互联网科技013171 工业互联网山东科技大学 中天科技中国工业互联网 产业互联网科技服务公司 版纳互联网科技选哪家 易租星互联网科技有限公司 科技信息时代互联网发展 互联网科技企业文化 互联网科技快速发展优美句子 互联网高科技 什么是科技互联网 保险科技 互联网保险 湖南永感互联网科技有限公司 互联网科技公司发展 剑昆互联网络科技有限公司临桂 互联网企业和科技型企业 为客找房互联网科技公司怎么样 互联网公司高科技产品 互联网风格科技公司名称
0