第一个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对特定技术的支持。这些依赖描述符包含了所有你需要开始使用某个技术所需的库,并且已经通过合理的默认配置进行了设置。 阅读详情

相关推荐

Ubuntu 22.04远程桌面终极指南:从零配置RDP到解决黑屏问题

本文提供了一份Ubuntu 22.04远程桌面配置的终极指南,详细讲解了如何从零开始安装和配置RDP服务,并重点解决了连接后常见的黑屏问题。通过分析会话冲突、修复启动脚本及配置权限策略,帮助用户实现稳定、高效的远程桌面连接,优化分辨率、禁用锁屏,打造无缝的远程工作体验。

sony5的博客 1386

SpringBoot的starter到底是什么?

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

3781

【AI基础学习系列】二十一、一文搞懂GPT

本文系统介绍了GPT(Generative Pre-trained Transformer)模型的核心内容。首先阐述了GPT的本质是基于Transformer的预训练语言模型,其创新在于使用单向Transformer编码器。其次详细解析了GPT架构,包括输入层的Tokenization和Embedding处理、Transformer解码器堆叠的核心组件(自注意力机制、前馈神经网络等)以及预训练和微调两阶段训练过程。接着说明了GPT的工作原理:通过无监督预训练学习语言统计规律,再结合有监督微调适应具体任务。

ASH_GUARDIAN的博客 1689

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

SDRAM控制器——添加读写FIFO

用FIFO实现数据缓存

H19981118的博客 2628

BMW Standard Tools 宝马FSC工具套装下载

这是一款非常专业的一套宝马编码工具,懂行的人自然知道他的用处,不懂行的人,我解释再多也不会明白的,需要的拿去吧。软件名:BMW Standard Tools包含工具:BMW Coding Tool v2.50、change Language、CIC Mafia、Dr.Gini B021、EasyConnect、EDIABAS Konfigurator v1.1、EDIABAS Konfigurator v2.0.0、FSC-Tools_2.18、FSTool_v2_CarServer、INPA、ITool

Zj_arrow的博客 7009

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

大唐杯5G考前冲刺篇(回顾全文重点必看)

大唐杯习题复习指南

nimo观察者 1万+

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

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

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

基于环形槽谐振器与PIN二极管的频率可重构Vivaldi天线设计与CST仿真研究

摘要 本文设计了一种基于FR4基板的频率可重构Vivaldi天线,通过集成环形槽谐振器(CSRR)和PIN二极管开关实现超宽带(UWB,2-8 GHz)与窄带(2.4/3.5/5.2 GHz)模式的电控切换。天线采用指数渐变槽线结构,结合CSRR的滤波特性和PIN二极管的开关功能,利用CST仿真优化参数。结果表明,UWB模式下S11<-10 dB,窄带模式下目标频点谐振显著,其他频段抑制良好,验证了设计的可行性。该方案为多频段无线通信系统提供了紧凑、低成本的可重构天线解决方案。 关键词:频率可重构天线

huanghm88的专栏 222

计算机视觉与深度学习 | 低照度图像增强算法综述(开源链接,原理,公式,代码)

激光雷达与可见光融合已在自动驾驶夜间感知中取得初步进展。当前主观评价(如MOS)与客观指标(PSNR/SSIM)常存在分歧,需建立感知质量统一的评估标准。轻量化设计仍是移动端部署的关键。WaveletMamba的线性复杂度模型为实时处理提供新思路。实验表明,该方法在PSNR指标上超越SOTA方法2.1dB,推理速度提升3倍。是传统方法的基石,由Edwin Land提出。开发如事件相机等新型传感器,其高动态范围特性可从根本上缓解低照问题。该方法在保留结构的同时抑制噪声,计算复杂度仅为。

尘世冰封的专栏 1366

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

vue3 - 实现WebRTC播放实时rtsp视频流+NVR录像机回放,web前端浏览器网页播放RTSP推流,支持海康威视大华等摄像头/监控设备对接(监控摄像头录像及回放,拿到rtsp视频流如何处理)

vue3,webrtc-streamer,rtsp视频流,监控画面,nvr录像机,回放功能,监控摄像头设备,vue3播放Rtsp推流示例代码,前端如何在vue3项目中播放rtsp视频流,VUE中播放RTSP实时推流播放解决方案,vue3 webrtc播放rtsp视频流,vue3实现rtsp视频流浏览器实时播放,海康摄像机、NVR、流媒体服务器、回放取流RTSP地址,vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频,播放海康rtsp监控视频,海康摄像机/录像机预览+回放RT

✅ 精选推荐文章 1万+

001、第一个Spring Boot程序

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

chijie6848的博客 176

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

启动!Spring Boot

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

weixin_44553952的博客 1010

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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的博客 7588

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、付费专栏及课程。

余额充值