兰州在线

Java互联网架构-Spring Boot源码分析

欢迎关注标题号:java小马哥

周一至周日下午3:30!精美的技术文章准时交付!

获取优质学习资料,请参阅文章末尾

SpringBoot通过内置的tomcat驱动ioc容器的启动。以下是分析SpringBoot启动过程的源代码。首先找到启动程序的入口点,然后从run方法输入它。

如下图所示,首先创建一个由initialize(sources)初始化的SpringApplication对象;方法,source是我们传入的主要配置类。

initialize方法首先将我们的main函数类转换为数组并保存它。然后通过deceuceWebEnvironment()推断当前环境是MVC环境还是响应式编程环境,返回一个布尔类型。

setInitializers方法是读取配置文件以找到用于初始化的类。

setListeners((Collection)getSpringFactoriesInstances(ApplicationListener.class));找到SpringListener监听器

this.mainApplicationClass=deduceMainApplicationClass();推断是否包含主要功能,如果它包含直接返回。

创建SpringApplication对象后,直接调用run方法,StopWatch stopWatch=new StopWatch();启动计时器,然后启动计时器,configureHeadlessProperty();这意味着启用了java.awt.headless./。通过百度,你可以清晰而简单。然后获取监听器,启动监听器并获取上下文参数,然后准备环境,单击。

如下图所示,getOrCreateEnvironment获取或创建环境F5,并发现如果它是MVC环境,则通过新的StandardServletEnvironment()和其他新的StandardEnvironment()创建环境创建环境。然后将准备好的环境添加到侦听器。然后判断是否MVC环境,如果没有,则转换环境。终于回来了。

环境准备好之后。设置横幅printedBanner=printBanner(环境);这句话创建了你的横幅创建的文本。 console createApplicationContext();这句话是重点,创建应用程序的上下文。通过在BeanUtil中实例化来创建它

指向并找到一个名为clazz.newInstance()的方法,以找出它从此处开始SpringIOC容器的初始化过程。

驱动SpringIOC容器的初始化过程。

散步后,回到分析器的开头=new FailureAnalyzers(context);创建分析师

FailureAnalyzer是一种在启动时拦截异常并将其转换为易于阅读的消息并将其包含在FailureAnalysis中的好方法。 Spring Boot为应用程序上下文敏感异常,JSR-303验证等提供了这样的解析器。实际上很容易创建自己的FailureAnalyzer。

AbstractFailureAnalyzer是FailureAnalyzer的一个抽象实现,它检查正在处理的异常中的指定异常类型。我们可以从中扩展,以便在存在指定的异常时有机会处理它。如果由于某种原因无法处理异常,则返回null以使另一个实现有机会处理异常。

FailureAnalyzer实现将在META-INF/spring.factories中注册:注册ProjectConstraintViolationFailureAnalyzer:

最后,通过prepareContext(context,environment,listeners,applicationArguments,printedBanner);

在prepareContext中,首先设置环境,然后转到后处理器,判断this.beanNameGenerator!=null,this.resourceLoader!=null,将执行,结果为空,applyInitializers(context);然后执行调用Initialize(context)方法

在下图中,通过调用getInitializers()来调用initializeContext方法以获取ApplicationContextInitializer类型,并执行不同的初始化操作。执行prepareContext方法后,输入refreshContext(context)方法。

如下图所示,它直接转移到启动IOC的地方。这个地方非常熟悉。 onRefresh方法是驱动SpringBoot的地方。

点击下面的方法,点击它

ServletContext localServletContext=getServletContext();获取servlet上下文,然后执行getEmbeddedServletContainerFactory(),这里获取一个BeanName数组。然后通过beanName数组获取EmbeddedServletContainerFactory。然后是containerFactory.getEmbeddedServletContainer(getSelfInitializer());非常重要的一点是进入并找到新的ServletContextInitializer()然后再次单击

找到以下方法,这里创建了tomcat环境和参数设置。然后执行prepareContext,设置Tomcat信息,设置上下文。

最后,执行以下方法,找到initialize();然后找到以下图片:this.tomcat.start(); tmocat启动,Tomcat完成。这是Springboot的整个启动过程。

覆盖地图源网络,侵权删除)

如果有收获,请帮忙转发,你的鼓励是作者的最大动力,谢谢!

大量的微服务,分布式,高并发性,高可用性原创系列文章即将推出,

欢迎关注标题号:java小马哥

周一至周日上午9:30!下午3:30高质量的技术文章按时发送!

超过十年的BAT架构经验

——