spring boot源码解析:默认使用tomcat启动分析

本文探讨了Spring Boot在未特殊配置时如何默认使用Tomcat作为Servlet容器。分析过程分为初始化配置工厂和获取Servlet容器并启动两个阶段。在阶段一中,通过调试和源码分析,揭示了Tomcat工厂是如何被注册的。在阶段二,详细跟踪了Tomcat服务器的初始化和Servlet容器的获取过程,最终定位到DefaultListableBeanFactory的角色。
摘要由CSDN通过智能技术生成

Spring boot在不特别配置的情况下默认使用tomcat作为启动容器,下面介绍一下我们的分析思路

spring boot的启动过程源码很繁琐,但是大致我们可以总结一下分为三个阶段:

1.初始化配置工厂

2.获取Servlet容器并启动

 

阶段一:初始化配置工厂

1.调试跟踪

那么我们又是如何分析到的呢,首先我们通过调试如下:

通过调试可以跟踪到是通过invokeBeanFactoryPostProcessors(beanFactory)方法将tomcat的工厂定义配置进去的 

 从这里解析的配置,函数名processConfigBeanDefinitions(BeanDefinitionRegistry registry)

 

我们对beanDefinition的注册方法加条件断点即可调试到tomcat的Factory方法是何时注册的

 

2.源码分析

下面进入我们的主流程:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerMain {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerMain.class, args);
    }
}

//SpringApplication.java
public ConfigurableApplicationContext run(String... args) {
		StopWatch stopWatch = new StopWatch();
		stopWatch.start();
		ConfigurableApplicationContext context = null;
		Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList<>();
		configureHeadlessProperty();
		SpringApplicationRunListeners listeners = getRunListeners(args);
		listeners.starting();
		try {
			ApplicationArguments applicationArguments = new DefaultApplicationArguments(
					args);
			ConfigurableEnvironment environment = prepareEnvironment(listeners,
					applicationArguments);
			configureIgnoreBeanInfo(environment);
			Banner printedBanner = printBanner(environment);
			context = createApplicationContext();
			exceptionReporters = getSpringFactoriesInstances(
					SpringBootExceptionReporter.class,
					new Class[] { ConfigurableApplicationContext.class }, context);
			prepareContext(context, environment, listeners, applicationArguments,
					printedBanner);
			refreshContext(context);//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值