第一个spring boot的starter

一分钟上手:如何创建你的第一个 Spring Boot Starter Spring Boot 的 starter 本质上是一种依赖管理和自动配置的机制。它将一组相关的依赖库整合在一起,并提供了默认的配置,使得开发者在需要使用特定功能时,只需简单地在项目中引入对应的 starter,Spring Boot 就能自动完成配置,让相应的功能开箱即用,无需手动去配置繁多复杂的各种依赖参数。 阅读详情

序

我们都知道可以使用SpringBoot快速的开发基于Spring框架的项目。由于围绕SpringBoot存在很多开箱即用的Starter依赖,使得我们在开发业务代码时能够非常方便的、不需要过多关注框架的配置,而只需要关注业务即可。

那么什么是starter呢?

例如我想要在SpringBoot项目中集成Redis,那么我只需要加入spring-data-redis-starter的依赖,并简单配置一下连接信息以及Jedis连接池配置就可以。这为我们省去了之前很多的配置操作。甚至有些功能的开启只需要在启动类或配置类上增加一个注解即可完成。

一个starter的原理

首先说说原理,我们知道使用一个公用的starter的时候,只需要将相应的依赖添加的Maven的配置文件当中即可,免去了自己需要引用很多依赖类,并且SpringBoot会自动进行类的自动配置。那么 SpringBoot 是如何知道要实例化哪些类,并进行自动配置的呢? 下面简单说一下。

首先,SpringBoot 在启动时会去依赖的starter包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包,这类似于 Java 的 SPI 机制。

第二步,根据 spring.factories配置加载AutoConfigure类。

最后,根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context 上下文当中。

我们也可以使用@ImportAutoConfiguration({MyServiceAutoConfiguration.class}) 指定自动配置哪些类。

定义一个start(首先一个starter是一个是一个简单的maven工程,不是一个spring boot的工程)的过程:

1.首先我们新建一个maven的项目(记住,是maven的项目,不能定义一个spring boot(如果定义成spring boot的项目,我们需要删除启动类,pom中的依赖等)的项目)

2.新建完maven项目后,我们再pom的包中导入如下两个依赖(用于加载配置文件的依赖):

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>2.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <version>2.0.0.RELEASE</version>
      <optional>true</optional>
    </dependency>
</dependencies>
3.建立配置文件:

    a.我们看redis,搜索RedisProperties这个类,可以看到在redis-starter中,有一个定义的对象。如下:

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
    private int database = 0;
    private String url;
    private String host = "localhost";
    private String password;
    private int port = 6379;
}

   b.依葫芦画瓢,我们定义一个属于自己的properties类

@Data

@ConfigurationProperties(prefix = "spring.person")
public class PersonProperties {
    // 姓名
    private String name;
    // 年龄
    private int age;
    // 性别
    private String sex = "M";
}  
4.服务类:

每一个starter都有自己的功能,如:redis的,根据配置文件连接到redis,提供出连接池等。所以每个服务只有

有一个服务核心类(可以有多个,在下面写配置文件的时候可以看到),如下,我们定义个一个属于自己的服务

核心类:

public class PersonService {

    private PersonProperties properties;

    public PersonService() {
    }

    public PersonService(PersonProperties properties) {
        this.properties = properties;
    }
    
    public void sayHello(){
        System.out.println("大家好,我叫: " + properties.getName() + ", 今年" + properties.getAge() + "岁"
            + ", 性别: " + properties.getSex());
    }
}
5.自动配置类:

这个自动配置类就是最重要的,通过第一步引入的两个jar包提供的一个注解,既可以将服务提供出去

如:在redis中,有一个RedisAutoConfiguration。依RedisAutoConfiguration,我们可以建一个PersonServiceAutoConfiguration

这个类:

@Configuration
@EnableConfigurationProperties(PersonProperties.class)
@ConditionalOnClass(PersonService.class)
@ConditionalOnProperty(prefix = "spring.person", value = "enabled", matchIfMissing = true)
public class PersonServiceAutoConfiguration {

    @Autowired
    private PersonProperties properties;

    @Bean
    @ConditionalOnMissingBean(PersonService.class)  // 当容器中没有指定Bean的情况下,自动配置PersonService类
    public PersonService personService(){
        PersonService personService = new PersonService(properties);
        return personService;
    }
}
下面是一个注释的使用方式:

@ConditionalOnClass:当类路径classpath下有指定的类的情况下进行自动配置

@ConditionalOnMissingBean:当容器(Spring Context)中没有指定Bean的情况下进行自动配置

@ConditionalOnProperty(prefix = “example.service”, value = “enabled”, matchIfMissing = true),当配置文件中example.service.enabled=true时进行自动配置,如果没有设置此值就默认使用matchIfMissing对应的值

@ConditionalOnMissingBean,当Spring Context中不存在该Bean时。

@ConditionalOnBean:当容器(Spring Context)中有指定的Bean的条件下

@ConditionalOnMissingClass:当类路径下没有指定的类的条件下

@ConditionalOnExpression:基于SpEL表达式作为判断条件

@ConditionalOnJava:基于JVM版本作为判断条件

@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置

@ConditionalOnNotWebApplication:当前项目不是Web项目的条件下

@ConditionalOnWebApplication:当前项目是Web项目的条件下

@ConditionalOnResource:类路径下是否有指定的资源

@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean
6.设置配置文件:

创建src/main/resources/META-INF/spring.factories的配置文件,并且在配置文件中配置上刚才自定义的PersonServiceAutoConfiguration类:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.mengday.helloworld.PersonServiceAutoConfiguration

注:如果有多个配置文件类,那么写法如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,

7.打包maven项目,clean+install

8.在一个新的spring boot项目中引入这个pom

9.配置application.properties

spring.person.name=test

spring.person.age=28

10.在新的spring boot项目中写一个test:

import com.mengday.helloworld.PersonService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MystarterApplicationTests {

    @Autowired
    private PersonService personService;

    @Test
    public void testHelloWorld() {
        personService.sayHello();
    }
}

终:最后一个自定义的starter就成功了。

starter的用处:

自定义starter可以用于封装一些公司内部框架的连接

Spring Boot之Starter依赖 在Spring Boot中,Starter依赖是一个非常重要的概念,它极大地简化了Spring应用的配置和依赖管理。Starter依赖本质上是一组方便的依赖描述符,你可以将它们添加到你的项目中,以获得Spring Boot对特定技术的支持。这些依赖描述符包含了所有你需要开始使用某个技术所需的库,并且已经通过合理的默认配置进行了设置。 阅读详情

相关推荐

ESP32 DMX512与RDM协议栈开发指南

DMX512-A是专业灯光控制领域广泛采用的串行通信标准,基于RS-485物理层实现确定性单向数据传输;RDM(Remote Device Management)则在其基础上扩展双向、可寻址、可配置的智能管理能力,满足现代舞台设备远程固件升级、自动发现与参数配置需求。二者共用同一总线但时序与帧结构严格隔离,对硬件定时精度、中断响应延迟及电气隔离提出极高要求。在嵌入式实践中,ESP32凭借Wi-Fi/蓝牙连接能力与丰富外设资源,成为构建低成本智能DMX节点的理想平台。esp_dmx协议栈正是面向该场景的高性能

weixin_34945060的博客 316

SpringBoot的starter到底是什么?

我们都知道,Spring的功能非常强大,但也有些弊端。比如:我们需要手动去配置大量的参数,没有默认值,需要我们管理大量的jar包和它们的依赖。为了提升Spring项目的开发效率,简化一些配置,Spring官方引入了SpringBoot。当然,引入SpringBoot还有其他原因,在这里就不过多描述了。本文重点跟大家一起聊聊的机制,因为它太重要了。 在还没有出来之前,我们使用开发项目。如果程序需要连接数据库,我们一般会使用或等框架,这里我以Mybatis为例,具体的操作步骤如下:当然有些朋友可能会指正,不是还

3780

FPGA实战:给你的UART串口通信加上Verilog奇偶校验位(Modelsim仿真验证)

本文详细介绍了如何在FPGA中实现UART串口通信的Verilog奇偶校验功能,包括发送端校验位生成和接收端校验检测的设计与实现。通过Modelsim仿真验证,确保数据传输的可靠性,适用于嵌入式系统和数字通信领域。

weixin_34216614的博客 341

SpringBoot_第一个starter的编写

准备工作: 1、创建两个模块 mavne:atlgq-spring-boot-starter //starter,负责引入自动装配 spring:atlgq-spring-boot-starter-autoconfigurer //负责自动装配 2、把不需要的文件和依赖都删除 atlgq-spring-boot-starter-autoconfigurer pom只留下starter,把主启动都删掉 1)、启动器模块 atlgq-spring-boot-starter 只负责引入自动配置模块 <?x

weixin_51578439的博客 148

杰理可视化SDK开发-杰理AC1123N芯片SDK开发笔记合集

该文档主要描述 AC112N开发相关的使用说明和注意事项,收集并持续更新开发调试过程中的相关疑问和解答,对SDK介绍文档做一个补充说明。写作人:李永奉,参考项目MD-026H; AC112N-SDK项目帮助文档在杰理开发者平台(JL DP)'帮助'处进入,如本文档有与后续帮助文档或工具注释说明冲突,以后者为标准。

李永奉的博客 187

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 374

open-slide 中 SVG 精度优化指南:用 SVGO 压缩坐标精度、控制演示与 Web 体积

本指南以 `.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md` 中的规则为骨架,讲解如何在 open-slide(一个面向 Agent 的幻灯片框架)中降低 SVG 坐标精度以减小文件体积。你读完可以掌握精度与 viewBox 尺寸的关系、手动精简 path 坐标的写法,以及用 `npx svgo

gitblog_00561的博客 981

【YOLOv11多模态融合改进】| CVPR2025 LCA轻量交叉注意力 双向模态交叉引导 + 双支路噪点抑制,兼顾纹理与热目标特征融合

可见光模态富含纹理、色彩、边缘细节,但夜间/低照度场景信噪比极低,暗区噪声泛滥;红外模态依靠热辐射凸显弱小目标、暗区物体轮廓,但缺失真实色彩与精细纹理。简单拼接/逐加融合仅做浅层特征叠加,无法建立可见光纹理、红外热特征的双向引导关联,两类模态互补信息无法精准互通;普通自注意力仅单模态内部建模,跨模态交互匮乏,红外热目标易被可见光暗噪声淹没,可见光有效纹理易被红外灰度信息覆盖;

Limiiiing的博客 121

年轻人的第一个自定义 Spring Boot Starter!

陆陆续续,零零散散,栈长已经写了几十篇 Spring Boot 系列文章了,其中有介绍到 Spring Boot Starters 启动器,使用的、介绍的都是第三方的 S...

Java技术栈,分享最主流的Java技术 300

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 566

8-阿里云服务器 ECS配置R及Studio Server

步骤概览:(首先要明确自己的系统然后进行安装)

hx2024的博客 1572

grpc-spring-boot-starter快速入门:5分钟搭建你的第一个gRPC服务

grpc-spring-boot-starter是一个强大的Spring Boot starter模块,专为gRPC框架设计,能够帮助开发者快速集成gRPC服务到Spring Boot应用中。通过它,你可以轻松实现高性能的RPC通信,让微服务之间的调用更加高效。 ## 为什么选择grpc-spring-boot-starter? gRPC作为一种高性能、跨语言的RPC框架,在微服务架构中越来越

gitblog_00498的博客 926

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

001、第一个Spring Boot程序

一、生成并运行第一个Spring Boot 项目 1. Spring Initializer 生成 Spring Boot 项目 选择 springboot 版本、java版本,填写 maven group 和 artifact,添加依赖的jar包(这里选Web和Actuator)后,...

chijie6848的博客 176

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

启动!Spring Boot

Spring Boot是基于Spring框架的轻量级开发工具,旨在简化Spring应用的初始搭建和开发过程。它采用"约定优于配置"原则,提供自动配置、内嵌服务器和starter依赖管理等功能,大大提升了开发效率。核心优势包括开箱即用、无代码生成、准生产环境监控等。 微服务架构是一种将单体应用拆分为独立小型服务的架构风格。每个服务可独立开发部署,通过轻量级通信机制交互。相比单体架构,微服务具有技术异构、独立扩展等优势,但也带来分布式系统复杂性等挑战。

weixin_44553952的博客 1010

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring开发系列教程(33)——第一个Spring Boot应用

摘要: 本文介绍了SpringBoot应用程序的基本结构和配置方法。主要内容包括:1)SpringBoot标准目录结构,重点说明YAML格式配置文件的优势;2)核心启动类Application.java的编写要点;3)pom.xml的依赖配置方式;4)SpringBoot自动配置原理,通过XxxAutoConfiguration类实现DataSource、JdbcTemplate等组件的自动创建。文章通过实例演示了如何利用条件注解控制Bean的创建,并对比了.properties和YAML两种配置格式的差异

彩蛋在每篇文章的最后名片 383

Spring Boot第一个web在浏览器输出Hello

开始第一个Spring Boot,在web浏览器输出Hello,感受快速开发。 1、建立Maven项目,pom.xml文件代码如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent...

技术工兵 972

Spring Boot问题总结

Svn 的 Update 与Maven 的update project 作用有什么区别 - 费曼带我飞 - 博客园。Spring Boot的启动器Starter详解 - chszs的专栏 - 优快云博客。参考了下其它正确的Spring Boot项目,发现是这行配置及代码出错了。然后执行:右击项目–>Maven–>Update Project(貌似Maven项目重新编译时使用后者比较好使。把它改成如下代码,重新install成功了。猜测可能是代码编译问题,尝试重新编译,Web开发要用后者。

2509_93923620的博客 259

spring-boot入门案例

springboot总结 1.2 编写第一个springboot工程 1.2.1 使用maven工具构建一个maven项目 1.2.2 在pom文件中引入父级依赖(spring boot项目启动时自动配置 pom文件如下) org.springframework.boot spring-boot-starter-parent 2.0.1.RELEASE 1.2.3 在pom文件引入web启动器 org.springframework.boot spring-boot-starter-web 1.

weixin_54473261的博客 142

企业级spring-boot案例-自定义Spring Boot Starter

文章目录1. 未使用Spring Boot Starter前的情况2. Spring Boot Starter简介2.1 什么是Spring Boot Starter(启动器)2.2 Starter 模块整体结构2.3 Spring 官方提供的 Starter 和 Starter 命名规范3. 自定义Spring Boot Starter3.1 根据 starter 命名规范创建一个 spring boot 项目3.2 在 pom.xml 文件中引入依赖3.3 编写`ConfigInfo.java`、`Co

ThinkWon的博客 7587

Spring Boot:通过spring-boot-starter-data-redis源码了解starter和autoconfigure模块

注:本文Spring Boot为2.X版本 在Spring Boot中,官方提供了`spring-boot-autoconfigure`包和starter包用来帮助我们简化配置,比如之前要建一个Spring mvc项目,需要我们配置web.xml,dispatcherservlet-servlet.xml,applicationContext.xml等等

404 Not Found 3万+

springboot之核心依赖spring-boot-starter,spring-boot-starter-parent,spring-boot-starter-web依赖解析

参考:https://blog.youkuaiyun.com/zhou920786312/article/details/84324915 https://blog.youkuaiyun.com/tr1912/article/details/79217132 spring-boot-starter:spring-boot场景启动器,后面跟的单词就是场景,比如说后面跟web,就是导入web场景的所有依赖。 1.sp...

大海无量的博客 3万+
上一篇: 什么是web flux?
下一篇: spring boot 配置篇
Problem-boy
博客等级 码龄10年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值