基于tomcat启动流程分析自动配置的实现

目录

1.ServletWebServerFacotry注入

2.ServletWebServerFactoryAutoConfiguration自动配置类

3.自动配置类解析

4.难点解析


1.ServletWebServerFacotry注入

在启动tomcat时,会根据类型获取ServletWebServerFacotry类型的beanName,那么ServletWebServerFactory接口中是如何注入的呢?

2.ServletWebServerFactoryAutoConfiguration自动配置类

按照SpringBoot自动配置思想,应该是有一个beanNameAutConfiguration的自动配置类,全局搜索

ServletWebServerFactoryAutoConfiguration,果然是有的,但是如果需要这个自动配置类生效,需满足两个条件

2.1 必须存在ServletRequest类: @ConditionalOnClass(ServletRequest.class)

2.2 必须是Web应用:@ConditionalOnWebApplication(type = Type.SERVLET)

也就是说项目中引入了web servlet相关的依赖

3.自动配置类解析

如果上述两个条件符合,Spring就会加载解析该自动配置类,加载其自定义的一系列bean,如ServletWebServerFactoryCustomizer、TomcatServletWebServerFactoryCustomizer等,同时导入配置的类

3.1 导入ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar,实际上是注册了两个后置处理器WebServerFactoryCustomizerBeanPostProcessor(重点)和ErrorPageRegistrarBeanPostProcessor

调用后置处理器初始化前方法,如果是WebServerFactory类型,继续执行后置处理器初始化前方法

调用WebServerFactoryCustomizer的customize,实际就是ServletWebServerFactoryCustomizer的方法,完成相关web容器的初始化,如服务端口、服务地址等

3.2 导入ServletWebServerFactoryConfiguration.EmbeddedTomcat等,底层还有条件注解判断,根据条件判断注入哪个实现类(TomcatServletWebServerFactory、JettyServletWebServerFactory、UndertowServletWebServerFactory)

eg:截图是以注入TomcatServletWebServerFactory为例,其它两类似

4.难点解析

在导入这四个类时,实际的顺序和逻辑顺序有点绕,主要因为BeanPostProcessorsRegistrar它是一个bean定义注册器,它的核心作用是注册WebServerFactoryCustomizerBeanPostProcessor这个bean后置处理器,重写了初始化前方法postProcessBeforeInitialization,这样当Spring在初始化TomcatServletWebServerFactory等web应用容器bean之前会先执行重写了的初始化前方法,设置相关属性,达到自动注册的效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值