springboot框架原理及流程?

springboot starter 原理解析及实践

starter是springBoot的一个重要部分敬升源。通过starter,我们能够快速的引入一个功能,而无需额外的配置。同时starter一般还会给我提供预留的自定配置选项,我们只需要在application.properties中设置相关参数,就可以实现配置的个性化。

那么这些方便的操作是怎么实现的呢?通过了解其原理,我们也可以做一个自己的starter,来让别人快速使用我们的功能。

按个人理解,我认为springBoot Starter就是一个 智能化的配置类 @Configuration 。

接下来介绍内容包括:

1、【创建module】,首先我们自定义一个starter的module,根据你的starter实现复杂度,引入相关spring组件。最基本的,我们只需引入 spring-boot-autoconfigure 模块。

2、【业务bean实现】实现我们的业务bean,案例中我们实现最简单的sayHello服务,输入msg,返回“hello,{msg}”。

3、然后就是Configuration类的创建,这个类是starter自动初始化的核心类,负责把业务相关的bean智能的加载进来。

4、配置 spring.factories ,通过该配置,才能让springboot来自动加载我们的Configuration类。具体原理我们稍笑隐后深入了解。

具体的,是在模块的 resources/META-INF 目录下,新建 spring.factories 文件。内容如下:

最后我们把上述模块单独执行以下install或者deploy,一个starter就做好了。

其他项目使用我们的starter就非常简单了:(1)引入starter依赖;(2)注入需要的service。

done!

回头再看上边的开发流程,有两个地方需要我们了解一下:

(1)如何让starter被自动识别加载:spring.factories里的EnableAutoConfiguration原理。

(2)如何实现自动加载的智能化、可配置化:@Configuration配置类里注解。

这里我们只简单的说一下大致的原理和流程,执行细节大家可以按照文章给出的思路自己去研读。

在SpringBoot的启动类,我们都会加上 @SpringBootApplication 注解亮态。这个注解默认会引入 @EnableAutoConfiguration 注解。然后 @EnableAutoConfiguration 会 @Import(AutoConfigurationImportSelector.class) 。

AutoConfigurationImportSelector.class 的selectImports方法最终会通过 SpringFactoriesLoader.loadFactoryNames ,加载 META-INF/spring.factories 里的 EnableAutoConfiguration 配置值,也就是我们上文中设置的资源文件。

实际使用中,我们并不总是希望使用默认配置。比如有时候我想自己配置相关功能,有时候我想更改一下默认的服务参数。这些常见的场景Starter都想到了,并提供了如下的解决方案:

springboot starter提供了一系列的 @Conditional* 注解,代表什么时候启用对应的配置,具体的可以去查看一下springboot的官方文档。

比如我们案例中的 「@ConditionalOnClass(DemoHelloService.class)」,代表如果存在DemoHelloService类时,配置类才会生效;又比如「@ConditionalOnMissingBean(DemoHelloService.class)」,代表着如果项目中没有DemoHelloService类型的bean,那么该配置类会自动创建出starter默认的DemoHelloService类型bean。

这个注解主要是为了解决如下场景:我想要使用starter的默认配置类,但是又想对配置中的某些参数进行自定义配置。 @ConfigurationProperties 类就是做这个工作的。例如上述例子中,我想对默认的defaultMsg做些个性化的设置。就可以按如下方式来实现:

starter新增ConfigurationProperties类bean

启用property

在实际项目中自定义默认msg

springboot启动流程是什么?

首先贴一张很不错的图,SpringBoot启动结构图,图片出自SpringBoot启动流程解析。本文的分析基于Spring Boot 2.1.5,非Spring的代码只有下面这个启。

提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。

Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。

SpringBoot的启动主要是通过实例化SpringApplication来启动的。

启亏竖胡动过程主要做了以下几件事情:配置属性、获取监听器,发布应用开始启动事件初、始化输入参数、配置环境,输出banner、创建上下文、预处理上下文、刷新上下文(加载tomcat容器)、再刷新上下文、发布应用已经启动事件、发布应用启动完成事件。

在SpringBoot中启动tomcat的工作在刷新上下这一步。

而tomcat的启动主要是实例化两个组件:Connector、Container,一个纤汪tomcat实例就是一个Server,一个Server包含多个Service,也就是多个应用程序,每个Service包含多个销拦Connector和一个Container,而一个Container下又包含多个子容器。

springboot框架原理及流程?  第1张

SpringBoot工作原理?

Spring Boot是由Pivotal团队提供的全新框架,其设羡兆计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架源局使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的雹派让配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

详见百科:

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的前端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:13
下一篇 2023-09-23 13:14

相关推荐

发表回复

登录后才能评论