这可能是Spring Boot Starter 讲的最清楚的一次了
Spring Boot Starter 是 Spring Boot 中非常重要的一个功能,它可以帮助开发人员快速集成各种第三方库和框架。本文将从 Spring Boot Starter 的基本概念入手,深入讲解 Spring Boot Starter 的实现原理及其应用场景。
一、Spring Boot Starter 的概念
Spring Boot Starter 是 Spring Boot 中的一个重要概念,它是一种提供依赖项的方式,可以帮助开发人员快速集成各种第三方库和框架。Spring Boot Starter 的目的是简化 Spring 应用程序的依赖管理,将一组相关的依赖项打包在一起,并提供一个依赖项描述文件,使开发人员可以快速集成。
在 Spring Boot 中,Starter 是由一组 Maven 依赖项构成的,通常包含一个或多个自动配置模块(Auto-Configuration Module)。这些自动配置模块会根据当前应用程序中存在的类路径和其他条件来决定是否要启用某个模块。
二、Spring Boot Starter 的实现原理
Spring Boot Starter 的实现原理可以分为两个方面:Maven 依赖管理和自动配置。
Maven 依赖管理
在 Maven 中,Starter 是一个 POM 文件,定义了一组依赖项和插件,用于配置和管理应用程序的依赖项。例如,对于 Spring Boot Web Starter,它包含以下依赖项:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.2</version>
</dependency>
这个依赖项将会引入一组 Spring MVC 相关的依赖项,包括 Spring Web、Tomcat、Jackson 等。而这些依赖项会在应用程序启动时自动配置,使得开发人员无需手动配置。
自动配置
Spring Boot 的自动配置是基于条件化配置(Conditional Configuration)机制实现的。条件化配置允许开发人员定义一组条件,当这些条件满足时,自动配置模块会被启用。
例如,对于 Spring Boot Web Starter,它包含以下条件化配置类:
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class })
@ConditionalOnMissingBean({ Servlet.class, DispatcherServlet.class })
这些条件表示该 Starter 适用于 Web 应用程序,并且在类路径中存在 Servlet 和 DispatcherServlet 类,同时不存在与这些类相关的 Bean。如果这些条件都满足,自动配置模块就会被启用,并为应用程序自动配置一些基本的 Web 相关功能。
三、 Spring Boot Starter 的核心原理
我们在前面介绍了 Spring Boot Starter 的使用方法,现在来深入探讨一下 Spring Boot Starter 的核心原理。
Spring Boot Starter 的核心原理是基于 Spring Boot 的自动配置机制,它是 Spring Boot 的一个重要特性,也是实现 Spring Boot Starter 的关键。Spring Boot 的自动配置机制通过扫描 classpath 上的 jar 包,自动配置 Spring 应用程序的运行环境。具体来说,自动配置机制会根据 classpath 上存在的 jar 包和配置文件,自动创建 Spring Bean,完成对应的配置。开发人员只需要引入对应的 Starter,就能够自动配置所需的 Bean,不需要手动编写配置文件。
Spring Boot Starter 实现自动配置的核心是自动配置类(AutoConfiguration Class)。自动配置类是一个标注了 @Configuration 注解的 Spring 配置类,它包含了所有需要自动配置的 Bean。在启动 Spring 应用程序时,Spring Boot 会自动扫描 classpath 上的所有 AutoConfiguration Class,并将其添加到 Spring 容器中。通过自动配置类,Spring Boot 能够自动配置 Bean,以及提供默认的 Bean 配置选项。开发人员可以通过配置属性来修改默认配置,或者通过编写自己的 Bean,来覆盖默认配置。
自动配置类的命名规则也非常重要,它决定了自动配置的触发条件。Spring Boot 的自动配置类命名规则是“*-autoconfiguration”,例如,Spring MVC 自动配置的类名为“WebMvcAutoConfiguration”。在引入 Spring Boot Starter 时,Spring Boot 会根据 Starter 的命名规则,自动扫描 classpath 上的自动配置类,从而实现自动配置。
Spring Boot Starter 实现自动配置的核心是 Starter 模块中的 META-INF/spring.factories 文件。该文件中包含了所有需要自动配置的 AutoConfiguration Class 的全限定名,如下所示:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
在启动 Spring 应用程序时,Spring Boot 会自动加载 META-INF/spring.factories 文件,并将其中所有的 AutoConfiguration Class 添加到 Spring 容器中。Spring Boot 还会根据 Starter 的依赖关系,自动加载依赖的 Starter 中的 AutoConfiguration Class。
- AutoConfigure 注解
除了在 Spring Boot Starter 中使用自动配置类,我们还可以通过 AutoConfigure 注解来实现自动配置。AutoConfigure 注解是 Spring Boot 提供的一个注解,它可以用来自动配置 Spring 应用程序。
AutoConfigure 注解的使用方法很简单,只需要在 Spring Boot 应用程序中的测试类上加上该注解,就可以实现自动配置。例如,我们可以在一个测试类中加上 @AutoConfigureMockMvc 注解,来自动配置 Spring MVC 的 MockMvc。
AutoConfigure 注解的实现原理与 Spring Boot Starter 类似,也是基于 Spring Boot 的自动配置机制实现的。AutoConfigure 注解中包含了需要自动配置的 Bean 的全限定名,Spring Boot 在启动时会自动扫描所有包含 AutoConfigure 注解的类,根据其中的配置来自动配置 Bean。
AutoConfigure 注解的命名规则也非常重要,它决定了自动配置的触发条件。Spring Boot 的 AutoConfigure 注解命名规则是“*-autoconfigure”,例如,Spring MVC 自动配置的注解为“@AutoConfigureMockMvc”。
- Enable 注解
除了使用 AutoConfigure 注解来自动配置 Spring 应用程序外,我们还可以使用 Enable 注解来开启某些特性。Enable 注解是 Spring Boot 提供的一个注解,它可以用于开启某些功能或特性。
Enable 注解的使用方法也很简单,只需要在 Spring Boot 应用程序中的配置类上加上该注解,就可以开启相应的功能或特性。例如,我们可以在一个配置类中加上 @EnableScheduling 注解,来开启 Spring 的定时任务功能。
Enable 注解的实现原理与 AutoConfigure 注解类似,也是基于 Spring Boot 的自动配置机制实现的。Enable 注解中包含了需要开启的功能或特性的全限定名,Spring Boot 在启动时会自动扫描所有包含 Enable 注解的类,根据其中的配置来开启相应的功能或特性。
Enable 注解的命名规则也非常重要,它决定了开启的功能或特性。Spring Boot 的 Enable 注解命名规则是“Enable*”,例如,开启 Spring 定时任务的注解为“@EnableScheduling”。
除了使用 AutoConfigure 注解来自动配置 Spring 应用程序外,我们还可以使用 Enable 注解来开启某些特性。Enable 注解是 Spring Boot 提供的一个注解,它可以用于开启某些功能或特性。
Enable 注解的使用方法也很简单,只需要在 Spring Boot 应用程序中的配置类上加上该注解,就可以开启相应的功能或特性。例如,我们可以在一个配置类中加上 @EnableScheduling 注解,来开启 Spring 的定时任务功能。
Enable 注解的实现原理与 AutoConfigure 注解类似,也是基于 Spring Boot 的自动配置机制实现的。Enable 注解中包含了需要开启的功能或特性的全限定名,Spring Boot 在启动时会自动扫描所有包含 Enable 注解的类,根据其中的配置来开启相应的功能或特性。
Enable 注解的命名规则也非常重要,它决定了开启的功能或特性。Spring Boot 的 Enable 注解命名规则是“Enable*”,例如,开启 Spring 定时任务的注解为“@EnableScheduling”。
四、Spring Boot Starter 例子
下面是一个简单的 Spring Boot Starter 例子,它可以用来快速集成 MyBatis:
public class MyBatisAutoConfiguration {@Autowiredprivate DataSource dataSource;@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);return sessionFactory.getObject();}
}@Configuration
@ConditionalOnClass(SqlSessionFactory.class)
@EnableConfigurationProperties(MyBatisProperties.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MyBatisAutoConfiguration {private final MyBatisProperties properties;public MyBatisAutoConfiguration(MyBatisProperties properties) {this.properties = properties;}@Bean@ConditionalOnMissingBeanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean factory = new SqlSessionFactoryBean();factory.setDataSource(dataSource);factory.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());factory.setMapperLocations(this.properties.resolveMapperLocations());return factory.getObject();}
}@ConfigurationProperties(prefix = "mybatis")
public class MyBatisProperties {private String typeAliasesPackage;private String[] mapperLocations;// 省略 getter 和 setter 方法
}
在上面的例子中,我们定义了一个名为 MyBatisAutoConfiguration 的自动配置类,它会自动配置 MyBatis,并将其注册为 Spring Bean。另外,我们还定义了一个名为 MyBatisProperties 的配置类,它用于读取 MyBatis 的配置属性。这样,开发人员只需要引入 Spring Boot MyBatis Starter,就可以快速集成 MyBatis,并进行数据库操作。
五、Spring Boot Starter 依赖管理
Spring Boot Starter 依赖管理采用了 Maven 的依赖管理机制。在使用 Starter 时,我们只需要在项目的 pom.xml 文件中添加以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.1</version>
</dependency>
在上面的例子中,我们添加了一个名为 spring-boot-starter-web 的依赖,它包含了 Spring Boot Web 开发所需的所有依赖,例如 Spring MVC、Tomcat、Jackson 等。
Spring Boot Starter 依赖管理会自动管理这些依赖的版本号和依赖关系,避免了版本号不一致或者依赖冲突的问题。同时,我们可以通过继承 Spring Boot Parent POM 来获得 Spring Boot Starter 的依赖管理能力。在 pom.xml 文件中,只需要添加以下代码即可:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.1</version><relativePath/> <!-- lookup parent from repository -->
</parent>
在上面的代码中,我们继承了 Spring Boot Starter Parent POM,并指定了版本号为 2.5.1。这样,我们就可以直接引用 Spring Boot Starter,而不需要关注版本号和依赖关系的管理。
六、总结
本文介绍了 Spring Boot Starter 的原理和使用方法。Spring Boot Starter 是 Spring Boot 框架中的一个重要组成部分,它能够帮助开发人员快速集成各种常用框架和技术。Spring Boot Starter 本质上是一个包含了必要依赖和自动配置类的 Maven 依赖,它能够自动配置应用程序的运行环境,并提供默认的配置选项,让开发人员可以快速开始开发。在使用 Spring Boot Starter 时,我们需要了解其工作原理,熟悉自动配置类和配置属性的使用方法,才能充分发挥其优势。
相关文章:
这可能是Spring Boot Starter 讲的最清楚的一次了
Spring Boot Starter 是 Spring Boot 中非常重要的一个功能,它可以帮助开发人员快速集成各种第三方库和框架。本文将从 Spring Boot Starter 的基本概念入手,深入讲解 Spring Boot Starter 的实现原理及其应用场景。 一、Spring Boot Starter 的概念 S…...
activiti7执行流程详解
什么是工作流? 官方定义:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统…...
iframe页面传值取值
业务:目标界面的是用原生js写的 , 被镶嵌到vue平台上 , 现在要求vue点击跳转的时候 ,要附带上值 ,让原生界面获取到值 , 完成页面设置查询。 想法 : vue跳转,使用this.$route.qu…...
2023年2月安全事件盘点
一、基本信息 2023年2月安全事件共造成约3796万美元损失,相较于上个月,安全事件数量与损失金额都有显著上升,其中Platypus Finance闪电贷攻击为单次利用损失之最高达850万美元。本月RugPull数量基本与上月持平,损失金额占比显著降…...
2023上海国际电商物流包装产业展览会相约上海
2023年7月5-7日 | 上海新国际博览中心 同期举办:2023上海国际快递物流产业博览会 指导单位:上海市邮政管理局 中国快递协会 主办单位:上海市快递行业协会 上海市仓储与配送行业协会 上海市物流协会 承办单位:上海信世展览服务有…...
营业执照注册资本是什么意思
一、营业执照注册资本是什么意思 营业执照上的注册资本是指合营企业在登记管理机构登记的资本总额,是合营各方已经缴纳的或合营者承诺一定要缴纳的出资额的总和。我国法律、法规规定,合营企业成立之前必须在合营企业合同、章程中明确企业的注册资本&…...
GB28181协议--SIP协议介绍
1、SIP协议简介 SIP(Session Initiation Protocol,会话初始协议)是一个用于建立、更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体会话或多媒体会议(GB28181安防使用的是SIP协议)。S…...
Python3 入门教程||Python3 元组||Python3 字典
Python3 元组 Python 的元组(tuple,简写为tup)与列表类似,不同之处在于元组的元素不能修改。 元组使用小括号(),列表使用方括号[]。 元组创建很简单,只需要在括号中添加元素,并使用逗…...
多元统计方法众多,分类还是排序?约束排序还是非约束排序?哪种方法或技术更适合我的研究目的或数据?
生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate statistical analysis)。多元统计分析内容丰富,应用广泛,是非常重要和…...
有关白盒加密
白盒密码技术白皮书 有关白盒的概念 其实白盒黑盒之类概念其实是软件保护方面的概念,在很多方面都有应用,例如 黑盒: 传统的加密技术是默认假定处于黑盒中的,也就是假定攻击者无法获得密钥。具体而言,认为攻击者并…...
C#学习系列之image控件配合ffmpeg播放视频(bitmap转image)
C#学习系列之image控件配合ffmpeg播放视频(bitmap转image)啰嗦ffmpeg输入格式与输出格式bitmap数据在image控件上显示数据转化总结啰嗦 关于音视频解码问题,采用海思解码库进行解码,存在C#托管调用动态库,会出现卡顿的…...
电容笔和Apple pencil有什么区别?开学季电容笔排行榜
与苹果的 Pencil相比,市面上常见的电容笔在压感上是没有具备重力压感,只具备着一种倾斜压感。对于绘画没有过高要求的话,其实一支普通的平替电容笔,就能为我们解决日常很多问题。它不仅可以用在办公上,也可以用在笔记、…...
【蓝桥杯每日一题】递归算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
java 寻找2020
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有一个数字矩阵,里面只包含数字 0 0 和 2 2。小蓝很喜欢 2020 2020,他想找 到这个数字矩阵中有多少个 2020 2020 。 小蓝只关注三种构成 …...
1.1 小白黑群晖构建,硬件推荐,硬件选购教程
构建一台黑群晖需要购买:CPU主板、散热器、内存条、机箱、电源、硬盘、网卡(可选)。物理机安装若需硬解需选择918/920此类机型系统进行安装。关联教程:黑群晖安装中的报错:https://guoqing.blog.csdn.net/article/deta…...
实验三、数字PID控制器的设计
实验三、数字PID控制器的设计 --- 直流闭环调速实验 一、实验目的 1.理解晶闸管直流单闭环调速系统的数学模型和工作原理;. 2. 掌握PID控制器参数对控制系统性能的影响; 3. 能够运用MATLAB/Simulink软件对控制系统进行正确建模并对模块进行正确的参数设置; 4.…...
python List和常用的方法
List:列表中包含多个数据,数据之间使用逗号分隔,索引从0开始。 空列表: dir:查看列表的所有方法 List常用方法:insert、append,extend、del、remove、pop、clear、count、index 增加insert(索引…...
PMP证书要怎么考,含金量怎么样?
对于新改版的PMP提纲,很多人都不知道如何去备考,这里我就总结一些经验,希望能帮助到大家!! 一,学习内容及考试形式? 学习内容:《PMBOK》项目管理知识体系指南,建议大家…...
MySQL实战解析底层---事务隔离:为什么你改了我还看不见
目录 前言 隔离性与隔离级别 事务隔离的实现 事务的启动方式 前言 和数据库打交道的时候,总是会用到事务最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱转账过程具体到程序里会有一系列的操作࿰…...
变更数据捕获(CDC)
从广泛意义上说,全球许多企业每天都需要通过频繁的数据批量处理与加载,来定期将数据从一个数据库迁移到另一个数据库(或数据仓库)。这类定期批量加载的工作,往往既耗费时间,又会消耗原始系统的大量处理能力。因此,管理…...
【移动端表格组件】uniapp简单实现H5,小程序,APP多端兼容表格功能,复制即用,简单易懂【详细注释版本】
前言: 由于最近需要做移动端的项目 有个pc端的后台系统里面需要移一部分页面过来 而里面就有很多的表格,我就开始惯例网上先找前人栽的树,我好乘凉 然后找了一圈发现,不管是主流的移动端ui库或者网上自己写的帖子,或者…...
电子技术——CMOS 逻辑门电路
电子技术——CMOS 逻辑门电路 在本节我们介绍如何使用CMOS电路实现组合逻辑函数。在组合电路中,电路是瞬时发生的,也就是电路的输出之和当前的输入有关,并且电路是无记忆的也没有反馈。组合电路被大量的使用在当今的数字逻辑系统中。 晶体管…...
【C++】C++11 新特性
目录 1.列表初始化 1.1. C98中使用{}初始化的问题 1.2. 内置类型的列表初始化 1.3. 自定义类型的列表初始化 2. 变量类型推导 2.1. 为什么需要类型推导 2.2. decltype类型推导 2.2.1 为什么需要decltype 2.2.2. decltype 3. 对默认成员的控制(default、delete) 3.1. …...
JPA 相关注解说明
jpa相关注解 JPA(Java Persistence API)是一种Java规范,定义了一套标准的对象关系映射(ORM)API,用于将Java对象映射到关系型数据库中。JPA旨在统一各种ORM框架之间的差异,提供一种标准化的ORM解…...
SAP 生产订单/流程订单中日期的解释
SAP 生产订单/流程订单中日期的解释 基本开始日期:表示订单的开始日期 基本完成日期:表示订单的完成日期 我们在输入基本开始日期和基本完成日期时需要关注 调度 下面的“类型”,其中有向前、向后、当天日期等: 调度类型 为向前…...
Java设计模式笔记——七大设计原则
系列文章目录 第一章 Java 设计模式之七大设计原则 文章目录系列文章目录前言一、单一职责原则1.案例分析2.改进二、开闭原则1.案例分析2.改进三、里氏替换原则1.案例分析2.改进四、依赖倒转原则五、接口隔离原则1.案例分析2.改进六、合成复用原则1.案例分析2.改进七、迪米特原…...
记录第一次接口上线过程
新入职一家公司后,前三天一直在学习公司内部各种制度文化以及考试。 一直到第三天组长突然叫我过去,给了一个需求的思维导图,按照这个需求写这样一个接口, 其实还不错,不用自己去分析需求,按照这上面直接开…...
时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含验证Loss曲线)
时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含训练和验证Loss曲线) 目录 时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含训练和验证Loss曲线)效果一览基本描…...
如何利用Level2行情数据接口追板和交易股票?
十档行情看得更深的A股行情软件,我们在盘口数据中可以看到,买一到买五以及卖一到卖五,共10个价位的挂单情况,但基于上证所的level-2行情软件,视野则扩展到了买一到买十以及卖一到卖十数据,无疑比所有免费软…...
MySQL常用的聚合函数
聚合函数聚合函数对一组值进行运算,并返回单个值。也叫组合函数函数作用COUNT(*|列名) 统计查询结果的⾏数AVG(数值类型列名)求平均值,返回指定列数据的平均值SUM (数值类型列名)求和,返回指定列的总和MAX(列名)查询指定列的最⼤值MIN(列名)查…...
vs2013怎么做网站/品牌形象推广
FastReport.NET提供方便的MS Word样式的预览窗口,支持在报表预览状态中进行文本搜索,还支持在报表预览状态中进行修改。 预览窗口文本搜索预览状态中修改 提供预览窗口中的导航。当您在设计报表时,您可以用其定义报表元素来形成一个报表大纲…...
手机网站怎么做单页面/信息如何优化上百度首页公司
SQLLDR HSTA/HSTA CONTROLSQLLoader.ctl SKIP4 LOAD6(只导入四到九行的记录)数据文件默认是.dat结尾对时间类型数据的转换:D_REQUESTDATE POSITION(*)char(8)"to_date(:D_REQUESTDATE,YYYYMMDD)"D_REQUESTTIME POSITION(*)char(6)"to_date(:D_REQUES…...
注册公司网站模板下载/深圳短视频seo教程
后端(路由)主要是获取客户端发来的请求(request),然后给他response。 //本地访问地址,http://127.0.0.1:8085/test.txt?namezhang&age27#li nodejs自带URL模块 var urlrequire(url) http.createServer…...
做个小程序多少钱/企业网站如何优化
目录一、linux安装jdk二、linux安装tomcat三、linux安装idea2020四、linux安装mysql一、linux安装jdk 7.在 /etc/profile 文件中配置环境变量: 10.让环境变量 的文件生效: source /etc/profile 然后在控制台输出环境变量: echo $PATH 如下&…...
个人承接网站建设/今日实时热搜
之前有搜索过相关的信息,但是都不是最全的,下面我们来直接了解这个特效吧: 下面我们来看一看代码的实现吧: 三个工具类:其中主函数中不需要写代码,只需布局有相应的控件即可,雪花的大小、颜色和…...
动易 网站首页/孝感seo
我看最近微博流行CSS居中技术,我看了几编资料写的都不多好,于是抽时间把相关资料整合了,具体内容如下。点击此处下载源码效果展示:要求:1.尽可能兼容更多浏览器,这里兼容到ie7,ie6不支持max-*就不考虑了。2.浏览器尺寸…...