SpringBoot原理-手写starter

SpringBoot自动装配原理分析,手写starter组件 2012 年 10 月,一个叫 Mike Youngstrom 的人在 Spring Jira 中创建了一个功能请求,要求在 Spring Framework 中支持无容器 Web 应用程序体系结构,提出了在主容器引导 Spring 容器内配置 Web 容器服务。这件事情对 SpringBoot 的诞生应该说是起到了一定的推动作用。 阅读详情

概念

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

简单的说

  1. 构建简单
  2. 减少配置(减少了spring中的web.xml application.xml spring-mvc.xml)

特点

Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
Provide opinionated ‘starter’ dependencies to simplify your build configuration
Automatically configure Spring and 3rd party libraries whenever possible
Provide production-ready features such as metrics, health checks, and externalized configuration
Absolutely no code generation and no requirement for XML configuration

  1. 内嵌Tomcat,Jetty或者Undertow,所以不需要打成war包部署至Tomcat
  2. 提供starter依赖,这一节的重点 eg:spring-boot-starter-web
  3. 尽可能自动配置第三方依赖
  4. 提供健康检查,可扩展配置
  5. 完全不需要配置代码或xml文件

手写starter

  1. 创建结构
    在这里插入图片描述
  2. 添加依赖
<!--开发自定义starter必须的依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
  1. 创建SayHello接口以及实现类
public interface ISayHello {
    //方便测试只有一个方法
    void sayHello();
}
import org.springframework.beans.factory.annotation.Autowired;

public class SayHelloImpl implements ISayHello {

    @Autowired
    private SayHelloProperties sayHelloProperties;

    @Override
    public void sayHello() {
        //从application.xml获取spring.gao.name的值
        String name = sayHelloProperties.getName();
        System.out.println("你好:" + name);
    }
}
  1. 创建读取application.yml类,模拟SpringBoot从application.yml文件读取配置
import org.springframework.boot.context.properties.ConfigurationProperties;

//自定义注解前缀为 spring.gao
@ConfigurationProperties(prefix = "spring.gao")
public class SayHelloProperties {

    private String name = "xiaoming";

    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}
  1. 创建自动配置类SayHelloAutoconfiguration,实现将SayHello注入SpringIOC
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//保证springboot启时注入IOC容器
@Configuration
@ConditionalOnClass(ISayHello.class)
@EnableConfigurationProperties(SayHelloProperties.class)
public class SayHelloAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public ISayHello getSayHello(){
        return new SayHelloImpl();
    }
}
  1. 创建META-INF目录下并创建spring.factories引入指定自动配置类
# 将加载指定的自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com/gao/cn/SayHelloAutoConfiguration
  1. 将依赖打包,在另一个项目导入这个依赖
mvn clean install 
  1. 测试结果
    在这里插入图片描述
一文搞懂Spring Boot Starter原理:手写自定义Starter,大厂开发必备 我们来写一个可复用的Redis操作Starter,功能包括:自动配置Redis连接池,封装常用的Redis操作工具类,支持jedis和lettuce两种客户端自动切换,符合大厂规范。给用户的自定义Bean加@Primary注解,优先使用用户的Bean。在@Bean注解上加,只有容器里没有的时候才创建。Starter是Spring Boot的核心设计思想之一,学会写自定义Starter,不仅能理解Spring Boot的自动配置原理,还能在公司里封装公共组件,提升团队的开发效率。 阅读详情

相关推荐

rfid标签技术原理

奇怪的是,RFID标签技术原理的深入剖析不仅揭示了其背后的奥秘,也让我们更加全面地认识到这一技术在数字化转型中的重要性和潜力。随着技术的不断进步和应用场景的不断拓展,RFID标签将在更多领域发挥重要作用,为物联网、智能制造等领域的发展注入新的活力。这意味着在一个读写器的覆盖范围内,可以同时读取多个RFID标签的数据,大大提高了数据收集的速度和效率。:RFID标签的“大脑”,负责存储和处理数据。芯片内部集成了存储器、控制逻辑和射频接口等电路,能够接收来自读写器的射频信号,执行相应的数据处理和通信任务。

x3088的博客 2159

如何手写SpringBoot中的Starter

如何手写SpringBoot中的Starter

CNDN_Web的博客 269

SQL手工注入及sqlmap注入(文章管理系统实例练习)

sql手工注入及sqlmap注入练习

weixin_53303754的博客 524

Spring Boot 2.0.0参考手册_中英文对照_Part II_8-10

Spring Boot 2.0.0

SnailTyan 3443

开关电源三大基本拓扑:反激、正激与桥式选型本质

开关电源拓扑是电力电子系统设计的核心基础概念,其本质决定能量传递路径、器件应力分布与系统物理边界。反激拓扑以耦合电感形式实现隔离与升降压,适用于小功率AC-DC场景;正激拓扑依赖实时能量传递与强制复位机制,支撑中功率高效率需求;桥式拓扑(含推挽/半桥/全桥)通过电压应力分摊与双向磁化,成为大功率系统的刚性选择。理解三者在磁芯工作模式、电流连续性、直流偏磁抑制等方面的原理差异,直接关系到效率、温升、EMI及可靠性等关键技术指标。本文聚焦反激、正激、桥式三大工程级基本拓扑的物理本质与落地约束,揭示从需求参数到电

cqwmy840702的博客 377

DBT关键切片重建算法

DBT通过有限角度(通常15°~50°)扫描,获取一系列低剂量投影图,重建出三维断层图像。传统FBP在稀疏角度下会产生严重的“伪影拖尾”和层间干扰。临床诊断中,放射科医生往往只关注几层关键切片(即病灶所在层),其余层仅作参考。

AI的内部世界的博客 89

SpringBoot学习笔记(一)

文章目录SpringBoot学习笔记核心思想为什么使用SpringBootSpringBoot 优点SpringBoot 缺点微服务分布式云原生SpringBoot 官方文档SpringBoot2入门1、系统要求1.1、maven设置2、HelloWorld2.1、创建maven工程2.2、引入依赖2.3、创建主程序2.4、编写业务2.5、测试2.6、简化配置2.7、简化部署参考文章 SpringBoot学习笔记 核心思想 约定大于配置 (CoC: Convention over Configuratio

涛涛之海 1271

Codex 自定义模型操作指南:CLI 与桌面客户端双端实操

检查版本 codex --version # 预期输出类似:codex-cli 0.133.0-alpha.1 # 如未安装 npm install -g @openai/codex假设你要接入DeepSeek,在# 临时设置(当前终端会话有效)export DEEPSEEK_API_KEY="sk-你的 DeepSeek API Key"# 永久设置(推荐,写入 shell 配置)

篮球界最会写bug的人;程序猿中打球最菜的人。 454

如何手写一个SpringBoot Starter

SpringApplication.run(DemoApplication.class, args);

cable5881的博客 883

【软考高级系统架构论文】论微服务架构及其应用

本文围绕“论微服务架构及其应用”展开论述。首先概要介绍了本人参与的某公司线上电子商务平台项目,在其中担任系统架构设计师。接着分析了微服务架构相较于单块架构的特点,如模块化与组件化、技术栈多样性、独立部署与扩展、高度容错与可用性等。最后结合项目阐述了软件架构对微服务模式的采用情况,以及实施过程中遇到的问题及解决方案,如服务划分粒度、数据一致性、监控与故障排查等问题,并给出了相应解决办法。

qq837993702的博客 225

2024-12月js逆向案例-sensor-data之vmp字段之akamai_2/3.0-(下)

akamai2/3的vmp字段逆向分析

十一姐的博客 3147

深入理解 Spring Boot Starters 原理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34162695的博客 2594

工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定

上图: 说明一下,工业相机有TTL逻辑电平触发,也有光耦触发等。 这里一般我们用电路板驱动,就用GPIO触发模式, 这里,准备了两个GPIO触发模式,为LINE2,LINE3都可以选择,然后有一个GPIO_GND 如果,你只有一个触发接口,那么如图,选两个就好了。 实际接法如图。 ...

山云的专栏 1万+

springboot自动装配原理,手写一个starter。

springboot自动装配原理,手写一个starter。

qq_51240148的博客 1135

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring boot 自动配置原理 以及手写一个springboot starter

1. Spring boot 自动配置原理 核心注解 1. @SpringBootApplication` @SpringBootApplication 是由3个注解构成 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 1.1@SpringBootConfiguration 等同于@Configuration 将启动类标注为一个配置类。不同的是@SpringBootConfiguration 允许自动找到配置。 1.2 @E

qq_21344887的博客 410

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringBoot自动装配原理 & 手写SpringBoot-starter

SpringBoot自动配置原理 和 手写SpringBoot-starter前言一、注解驱动二、自动装配三、starter组件 前言 springboot给我的印象就是省去了繁琐的xml配置、自动装配 、微服务、starter组件等等相关内容。虽然平时也一直在用,但是具体的原理没有很深入的了解过。趁这段时间工作不忙针对性的学习了下。 一、注解驱动 要学习springboot首先要对相关注解有一定了解,我大致列出了以下注解,注解的作用自行百度: @Configuration @Import @Condit

qq_35080214的博客 1339

Spring Boot自动装配原理拆解+实战手写Starter组件

1.我们先新建一个springboot项目,这里的application.properties和Application启动类都是不需要的。这个文件可写可不写,主要是定义配置信息的内容(指定demo.boy.name必须是String类型)区别: 1.starter命名规则不一样(如上) 2.xxx-starter是第三方的,自动配置类在。类,从配置文件(引用这个starter的项目的配置文件)中读取配置。starter-xxx是官方的,自动配置类在。这个文件必须写,配置自动装配的类的路径。

mxt51220的博客 970

springboot自动配置原理及手写starter

本文是向大家介绍springboot的精髓部分-自动装配,掌握自动装配能让你更深的去理解boot框架,学会启动器(starter)的开发,能让你的开发更加便捷、得心应手、效率加倍。

weixin_43805705的博客 781

SpringBoot-starter原理之手写

目录 一、前言 二、实现思路 2.1 命名规范 2.2 实现步骤 三、手写实现 3.1 新建第三方jar 3.2 新建starter工程 3.3 引入jar包 3.4 编写自动配置类 3.5 编写配置发现文件 3.6 打包发布 四、测试 一、前言 SpringBoot-starter的原理,在之前的文章中已作解析,可点此传送。 今天要来手动实现一个自己的SpringB...

天天向上 8108

SpringBoot自动配置原理、手写一个xxx-spring-boot-starter

SpringBoot的理念是“约定大于配置”,只要按照SpringBoot约定的规则来提供第三方的jar,SpringBoot就可以自动扫描jar中的Bean加载到IOC容器中。先要了解SpringBoot自动配置的原理,才能手写一个xxx-spring-boot-starter。

这是我的笔记本,记录学习历程,分享学习经验,菜鸡一枚,感谢支持! 831

一文搞懂SpringBoot自动装配:手写Starter深入@Conditional与@EnableAutoConfiguration原理

你是不是也经历过:引入一个starter,啥都没干,它居然自己“活”了?Web容器启了,数据源配了,连Redis都连上了。这到底是魔法,还是阴谋?别急,今天咱们就掀开SpringBoot自动装配的底裤。从@SpringBootApplication的三大马甲,到@EnableAutoConfiguration背后的“内鬼”AutoConfigurationImportSelector;从spring.factories的“注册表”玄学,到@Conditional系列注解的精准狙击——我们不讲虚的,直接手写一

m0_72340523的博客 844

SpringBoot自动装配原理及手写starter教学

想要了解自动装配的原理,我们需要依次了解一下问题: 什么是自动装配? 为什么要用自动装配,为了解决什么问题? SpringBoot中如何实现我们的自动装配?每次装配是全部加载还是按需加载? 如果让我们自己手写starer怎么实现?(考察自动装配的掌握程度) 自动装配 自动装配:在springboot帮助下,通过简单的配置注解即可使用相应的功能点 这么解释显得单一,还体会不到这个概念和用自动装配的好处,简单穿插下关于spring,springboot, springboot的概念,对比才能显示出它本身的优

weixin_44070630的博客 1408

SpringBoot自动装配原理与手写Starter实战

在Java企业级开发中,SpringBoot的自动装配机制通过条件注解与SPI思想实现了约定优于配置,大幅简化了传统Spring繁琐的XML配置。其核心原理在于利用ImportSelector动态加载候选配置类,并借助@Conditional系列注解按需过滤,确保组件在满足特定条件时自动生效。这一机制不仅提升了开发效率,更支撑了中间件与自研组件的快速集成。理解自动装配链路,能帮助开发者高效排查配置冲突、自定义Starter,并深入掌握SpringBoot源码设计。

weixin_33766805的博客 187

SpringBoot之Starter组件手写和启动原理解析

定义: starter是一种服务(或者叫插件)——使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,只需要导入相关maven坐标,由Spring Boot自动通过classpath路径下的类注入需要的Bean,并织入bean。 简而言之:组件化开发思维,提高代码复用性,避免重复造轮子,开箱即用!! 大概启动原理 Spring Boot的启动类上有一个**@SpringBoo...

qq_42145271的博客 684

带你手写starter组件,搞懂SpringBoot自动配置原理

至此,我们就实现了手写SpringBoot项目中的starter组件,进而实现了自动配置。其实从仿照druid的Datasource类中就可以发现,SpringBoot的核心机制就是可以自动配置,通过大量的自动配置,大量的bean被自动配置到容器中,这就大大简化了过去手动配置bean的过程,从而简化整个项目的开发过程,这也就是SpringBoot的最大优势所在!现在你知道SpringBoot是怎么实现自动配置的了吗?如果你还有什么疑问,可以在评论区给壹哥留言,或者关注下面的【Java架构栈https。...

一一哥 1250
上一篇: mybatis-spring-boot-starter配置以及使用
下一篇: 学习笔记(01):第1章 软件架构设计原则-1.Open-Closed Principle 开闭原则
Demodemon
博客等级 码龄10年 4粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值