当前位置:首页 > 数码 > Spring-Boot-Starter原理详解-b-b (springernature)

Spring-Boot-Starter原理详解-b-b (springernature)

admin8个月前 (04-15)数码40

SpringBoot Starter 是一种包含了一组特定功能和依赖关系的依赖项,旨在为特定的应用程序场景提供快速集成和开箱即用的功能。主要用于将常用的功能模块打包成一个可重用的依赖项,开发者只需引入相应的Starter,即可自动配置和启用相关功能,无需手动配置或使用复杂的 XML 文件。

Starter 命名规则

SpringBoot Starter 命名规则是 spring-boot-starter-{name} ,其中 {name} 表示具体的功能模块,如 spring-boot-starter-web 表示 Web 开发相关的 Starter。命名规则使得开发者可以根据功能名称快速找到对应的 Starter,并进行引入和使用。

Starter 的原理

Starter 的核心原理是自动配置和条件化装配。SpringBoot 根据 classpath 上的资源和配置来自动配置应用程序的特定功能模块,而 Starter 中的 spring.factories 文件则是自动配置的入口。在 spring.factories 文件中,通过声明 org.springframework.boot.autoconfigure.EnableAutoConfiguration 类型的类来启用自动配置。自动配置类通过 @Conditional 注解来判断是否满足特定条件,如果满足条件,则会自动配置相应的功能模块。

通过 Maven 或 Gradle 等构建工具引入 Starter 时,它们会自动将 Starter 中的依赖项引入到项目的 classpath 中。

自定义 Starter

开发者也可以自定义自己的 Starter,使其适应特定的应用程序需求。自定义 Starter 的核心是创建一个包含自动配置类和依赖项的 Maven 或 Gradle 项目。在自动配置类中,通过 @Conditional @Configuration @Bean 注解等,实现自定义功能模块的自动配置。在项目构建中引入自定义 Starter 的依赖后,就可以在应用程序中直接使用自定义功能模块,无需手动配置。

b

总结

SpringBoot Starter 的原理基于自动配置和条件化装配,通过引入相应的 Starter,开发者可以快速集成和使用特定的功能模块,减少了手动配置和依赖管理的工作量,提高了开发效率。同时,开发者也可以根据自己的需求自定义 Starter,实现自动配置和功能模块的重用。


SpringBoot启动原理分析

自动配置核心类SpringFactoriesLoader 上面在说@EnableAutoConfiguration的时候有说META-INF下的文件,那么这个文件是怎么被spring加载到的呢,其实就是SpringFactoriesLoader类。 SpringFactoriesLoader是一个供Spring内部使用的通用工厂装载器,SpringFactoriesLoader里有两个方法, 在这个SpringBoot应用启动过程中,SpringFactoriesLoader做了以下几件事: 加载所有META-INF/中的Initializer 加载所有META-INF/中的Listener 加载EnvironmentPostProcessor(允许在Spring应用构建之前定制环境配置) 接下来加载Properties和YAML的PropertySourceLoader(针对SpringBoot的两种配置文件的加载器) 各种异常情况的FailureAnalyzer(异常解释器) 加载SpringBoot内部实现的各种AutoConfiguration 模板引擎TemplateAvailabilityProvider(如Freemarker、Thymeleaf、Jsp、Velocity等) 总得来说,SpringFactoriesLoader和@EnableAutoConfiguration配合起来,整体功能就是查找文件,加载自动配置类。 整体启动流程 在我们执行入口类的main方法之后,运行,后面new了一个SpringApplication对象,然后执行它的run方法。 初始化SpringApplication类 创建一个SpringApplication对象时,会调用它自己的initialize方法 执行核心run方法 初始化initialize方法执行完之后,会调用run方法,开始启动SpringBoot。 首先遍历执行所有通过SpringFactoriesLoader,在当前classpath下的META-INF/中查找所有可用的SpringApplicationRunListeners并实例化。 调用它们的starting()方法,通知这些监听器SpringBoot应用启动。 创建并配置当前SpringBoot应用将要使用的Environment,包括当前有效的PropertySource以及Profile。 遍历调用所有的SpringApplicationRunListeners的environmentPrepared()的方法,通知这些监听器SpringBoot应用的Environment已经完成初始化。 打印SpringBoot应用的banner,SpringApplication的showBanner属性为true时,如果classpath下存在文件,则打印其内容,否则打印默认banner。 根据启动时设置的applicationContextClass和在initialize方法设置的webEnvironment,创建对应的applicationContext。 创建异常解析器,用在启动中发生异常的时候进行异常处理(包括记录日志、释放资源等)。 设置SpringBoot的Environment,注册Spring Bean名称的序列化器BeanNameGenerator,并设置资源加载器ResourceLoader,通过SpringFactoriesLoader加载ApplicationContextInitializer初始化器,调用initialize方法,对创建的ApplicationContext进一步初始化。 调用所有的SpringApplicationRunListeners的contextPrepared方法,通知这些Listener当前ApplicationContext已经创建完毕。 最核心的一步,将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext。 调用所有的SpringApplicationRunListener的contextLoaded方法,加载准备完毕的ApplicationContext。 调用refreshContext,注册一个关闭Spring容器的钩子ShutdownHook,当程序在停止的时候释放资源(包括:销毁Bean,关闭SpringBean的创建工厂等) 注: 钩子可以在以下几种场景中被调用: 1)程序正常退出 2)使用() 3)终端使用Ctrl+C触发的中断 4)系统关闭 5)使用Kill pid命令杀死进程 获取当前所有ApplicationRunner和CommandLineRunner接口的实现类,执行其run方法 遍历所有的SpringApplicationRunListener的finished()方法,完成SpringBoot的启动。

springboot自动配置原理

springboot自动配置原理是基于条件判断来配置Bean。

pring Boot的自动配置原理是基于Spring框架的条件化配置(Conditional Configuration)机制实现的。在Spring Boot中,自动配置类都是使用@Configuration注解标注的Java配置类,并且使用了多种条件注解来控制自动配置的条件和范围。

当指定的类在类路径中存在时,才会创建Bean或执行配置;当容器中不存在指定的Bean时,才会创建Bean或执行配置;当指定的配置属性存在时,才会创建Bean或执行配置;当应用是Web应用时,才会创建Bean或执行配置。

如果符合条件,Spring Boot就会自动创建Bean并注入到容器中,完成自动配置的过程。这样,应用就可以在不需要手动编写配置的情况下,快速地完成常见的功能配置,提高开发效率。

使用Spring Boot进行配置的注意事项

1、版本兼容性:Spring Boot的不同版本可能存在一些兼容性问题,需要注意选择相应的版本,以确保项目能够正常运行。

2、依赖管理:Spring Boot支持自动配置和依赖管理,需要注意导入的依赖是否正确,以避免出现冲突或版本不兼容等问题。

3、配置文件:Spring Boot的配置文件有多种格式,如properties、yaml、json等,需要根据项目的需要选择相应的格式,并将配置文件放置在正确的位置。

4、配置项:Spring Boot的配置项较多,需要注意配置项的正确使用和设置,如数据库连接、端口号、日志级别等。

5、自动配置:Spring Boot的自动配置能力较强,但也需要注意自动配置的正确性,如是否需要关闭自动配置、是否需要修改默认配置等。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Spring

“Spring-Boot-Starter原理详解-b-b (springernature)” 的相关文章

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

什么是AOP? AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,其主要目的是将横切关注点(cross-cutting concern)从主要业务...

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

SpringBeanDefinition元信息定义形式 BeanDefinition是一个蕴含Bean元数据的对象。它形容了如何创立Bean实例、Bean属性的值以及Bean之间的依赖相关。...

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

简介 Spring 事务传播性是指在 Spring 环境中,当多个包含事务的方法嵌套调用时,每个事务方法如何处理事务上下文中的提交或回滚行为。 传播性行为 Spring 中定义了 7 种事...

b-b-核心原理拆解与源码分析-2.0-Spring-Boot-深度实践 (核心b类期刊有哪些)

b-b-核心原理拆解与源码分析-2.0-Spring-Boot-深度实践 (核心b类期刊有哪些)

SpringBoot是一个基于Spring的轻量级框架,它简化了Spring应用程序的创建过程,使得开发者能够快速搭建一个可运行的应用程序。随着SpringBoot2.0版本的发布,其功能和性能得...

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

概述 Kafka的弱小性能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条信息的值。可以智能或手动参与该值。假设咱们因为失误而不可处置信息并想重试,咱们可以选用...

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

在 2023 年,SpringBoot 3.0 的发布标志着 Spring 框架对 GraalVM 的全面支持。此支持对 Spring 技术栈来说是一项重大补充。 GraalVM 概述...

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

1.引见 Spring6是一个十分弱小的框架,它提供了许多工具和接口来简化远程接口调用。其中,WebClient、RestTemplate、HTTPInterface和RestClient是...

Spring-Webflux-Boot-虚构线程性能逊色于-深化比较 (springboot)

Spring-Webflux-Boot-虚构线程性能逊色于-深化比较 (springboot)

早上看到一篇关于SpringBoot虚构线程和Webflux性能对比的文章,感觉还不错。内容较长,抓重点给大家引见一下这篇文章的外围内容,繁难大家极速浏览。 测试场景 作者驳回了一个尽...