Spring Boot深入理解+核心特性讲解(超强源码版)需要一定的基础观看噢

2023-05-16

文章目录

  • 开篇
  • spring boot的诞生
  • spring boot核心特性
    • web服务器(WebServer)
    • @ConditionalOnXXX
    • 工厂加载机制
    • 配置加载机制
    • spring boot Actuator

开篇

这篇博文主要总结我自己学到现在对spring boot的理解,这里包含的spring boot核心特性包含:web服务器、工厂加载机制、配置加载机制、条件注解等。
在这里插入图片描述

spring boot的诞生

一开始是由Pivotal团队内部有一个想法:ICWA(Inprove Containerless Web Application Architectures改进无容器的web应用),也就是认为基于servlet的开发太繁琐了,会给很多学习spring的开发工作者增加很多学习负担和压力,那来总结一下基于servlet容器开发模式会面临的问题吧:

  • 需要web.xml配置文件或者其他的servlet配置文件,而且不同的配置文件在不同的servlet容器中还可能会采取不同的格式
  • 需要构造war包并部署到servlet容器中才能够运行
  • 不同servlet容器有不同的配置方式,比如端口和线程池等你都必须需要去熟悉
  • ClassLoader继承机制较为复杂
  • 监控和管理功能要在应用外部进行配置
  • 只能单独配置日志
  • 需要了解ApplicationContext内的各种配置及它们之间的继承关系等
    在这里插入图片描述
    好的框架的出现就是基于现有的框架出现的问题进行改进,那么一个更加完善的框架便出现了。
    2013年,Pivotal团队开始研发SpringBoot。
    2014年4月,发布全新开源的轻量级框架的第一个SpringBoot版本。

spring boot核心特性

web服务器(WebServer)

内置的servlet已经成为过去式,在spring boot中将此特性称为WebServer
WebServer表示一个可内置的web服务器(比如说TomcatWebServer/NettyWebServer/JettyWebServer/UndertowWebServer),可以通过WebServer接口对外提供的start方法启动服务器,用stop方法停止服务器,有了WebServer,我们不再需要关心外部的Web服务器、web.xml文件、乱七八糟的Servlet和Filter等,只需要编写代码并把项目打包成jar包后直接运行即可,这非常适合云原生架构中的可独立部署特性。

以下是WebServer的源码:

在这里插入图片描述
源码主要方法的注解部分:
在这里插入图片描述
getPort()方法返回server监听的端口号,如果没有监听,则返回-1
对于WebServer来说,有两个工厂接口去创建它,一个是ServletWebServerFactory,一个是ReactiveWebServerFactory
在这里插入图片描述
在这里插入图片描述
我们熟悉的定制错误界面、错误页注册表,要用到的ConfigurableWebServerFactory接口,它就是继承自WebServerFactory(不过这是一个空接口),ConfigurableWebServerFactory接口表示这是一个可配置的WebServerFactory接口
在这里插入图片描述
在这里插入图片描述
ConfigurableWebServerFactory提供了WebServer常用的配置信息,它的子接口表示各个WebServer实现类独有的配置,真正创建WebServer的工厂类(像TomcatServletWebServerFactory)通过继承和实现接口的方式实现了ConfigurableWebServerFactory和ServletWebServerFactory这两个接口。
在这里插入图片描述

后续对WebServer添加了新的方法:WebServerInitializedEvent
在这里插入图片描述
这个类主要是表示ApplicationContext刷新过后且WebServer处于ready状态下会触发的事件

注意:spring cloud服务注册的时机就是在WebServerInitializedEvent事件被触发的时候噢!

@ConditionalOnXXX

springboot大家都懂,他最重要的就是——自动装配,那么自动装配主要就是以下这个模块,这个模块里有很多第三方的依赖,比如什么WebMvcAutoConfiguration/KafkaAutoConfiguration等
在这里插入图片描述
具体的spring boot提供的条件注解这里提供一篇博客,写的很全面:
传送门
这里跳过
在这里插入图片描述

工厂加载机制

条件注解作用于自动配置类,那么自动配置类是从哪里被加载的呢?
答案就是通过工厂加载机制啦
这个机制会从META-INF/spring.factories文件中加载自动化配置类
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
像我们熟悉的AOP、Cache等都被spring boot自动装配了
再回到spring boot启动类中:
随便找的一个启动类哈,不要介意~
在这里插入图片描述
启动spring boot应用最熟悉的就是@SpringBootApplication,这个注解是一个复合注解:
在这里插入图片描述
在项目启动的时候@EnableAutoConfiguration注解会导入AutoConfigurationImportSelector
在这里插入图片描述
AutoConfigurationImportSelector内部的selectImports方法中要导入的配置类是通过SpringFactoriesLoader获取的
在这里插入图片描述
SpringFactoriesLoader
在这里插入图片描述
在这里插入图片描述

配置加载机制

熟悉的配置文件来啦
在这里插入图片描述

在spring boot中,将配置文件封装成了PropertySourceLoader接口,这个接口源码如下:
在这里插入图片描述
getFileExtensions()方法表示支持的文件后缀
load方法表示将资源Resource加载成PropertySource
关于配置文件的话呢,大家都知道有两种啦——以yml、properties结尾这两种,对于PropertySourceLoader接口spring boot只有两种实现:

  • PropertiesPropertySourceLoader
    在这里插入图片描述

  • YamlPropertySourceLoader
    在这里插入图片描述
    另外,在spring boot内部还维护着一个ApplicationListener集合属性,用于监听ApplicationEvent。在默认的情况下会被工厂加载机制(加载key为org.springframework.context.ApplicationListener):
    在这里插入图片描述
    其实,ConfigFileApplicationListener这个类是spring boot配置加载的核心类,但是这个类目前已经过时了,下次再重点讲这个吧
    在这里插入图片描述

spring boot Actuator

与Production-ready特性有关,这些特性需要引入模块spring-boot-starter-actuator才生效噢
这个主要的作用就是让我们监控应用以及跟应用之间的交互作用。其中,Endpoint是比较核心的功能,它的作用就是为了让我们方便监控和应用交互。
好啦,那今天就到这吧,希望以后我对spring boot的掌握和理解能够更加深刻。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot深入理解+核心特性讲解(超强源码版)需要一定的基础观看噢 的相关文章

随机推荐