spring boot 内置tomcat源码学习(一)
主要是总结一下最近看spring源码的学习到的经验,这一部分是springboot中对server配置内容是怎么初始化到代码中。
springboot使用的版本是2.0.4.RELEASE
1.第一部分是将配置文件中的配置信息加载到TomcatServletWebServerFactory 工厂类中。整个流程图如下:
1.1WebServerFactoryCustomizerBeanPostProcessor 类
implement BeanPostProcessor ,实现 postProcessBeforeInitialization();
BeanPostProcessor 这个接口是spring提供的接口,只要类实现了这个接口,并实现其中的两个方法就可以再spring 容器初始化所有的bean对象之前和之后进行一些操作。WebServerFactoryCustomizerBeanPostProcessor 的源码如下:
[code] @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof WebServerFactory) { postProcessBeforeInitialization((WebServerFactory) bean); } return bean; }
[code]其中的postProcessBeforeInitialization(WebServerFactory webServerFactory) 会从spring容器中获取到所有的WebServerFactoryCustomizer对象,并调用他们的customize(webServerFactory);
1.2ServletWebServerFactoryCustomizer
[code]customize(ConfigurableServletWebServerFactory factory)主要是将ServerProperties类中获取到的配置信息转换到factory类中。
[code]public void customize(ConfigurableServletWebServerFactory factory) { PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); map.from(this.serverProperties::getPort).to(factory::setPort); ... }
2.通过TomcatServletWebServerFactory 获取到WebContext
[code]2.1 ServletWebServerApplicationContext:就是应用的applicationContext对象 ,保存一个WebServer对象。
[code] @Override protected void onRefresh() { super.onRefresh(); try { createWebServer(); } catch (Throwable ex) { throw new ApplicationContextException("Unable to start web server", ex); } }
3.其中用到设计思想。
3.1模板方法
模板方法主要用于一些有通用的流程,但是有不同的实现方的场合。接口声明通用的流程或者规范。抽象类中有通用的实现,实现类中定制的一些内容。
3.2processor设计
WebServerFactoryCustomizerBeanPostProcessor
这个类就体现了这种模式设计,从spring容器中获取所有的WebServerFactoryCustomizer的实现,并排序,然后根据集合中的顺序,依次调用,跟责任链模式的功能是一样的,但是语义上没有链式调用。
- spring boot内置tomcat设置虚拟目录
- Spring Boot修改内置Tomcat端口号
- SpringBoot源码解析:tomcat启动分析
- Spring Boot修改内置Tomcat端口号
- Spring Boot修改内置Tomcat端口号
- spring boot 学习之路5(打成war包部署tomcat)
- springboot 内置tomcat配置内存
- springboot学习系列问题:Tomcat启动报错
- Spring Boot修改内置Tomcat端口号
- Spring Boot 定制与优化内置的Tomcat容器实例详解
- SpringBoot + Spring Security 学习笔记(二)安全认证流程源码详解
- springBoot项目打jar包发布时启动包内置tomcat无法启动错误分析
- 详解springboot-修改内置tomcat版本
- (六)SpringBoot源码解析----springboot 与 tomcat
- Spring Boot修改内置Tomcat端口号
- spring-boot启动源码学习-3
- Spring Boot 定制与优化内置的Tomcat容器
- 手写springboot--依据原理(内置tomcat的手写,以及内置springmvc的手写)撰写
- spring boot学习1之main和tomcat启动及log日志
- spring-boot设置内置启动的tomcat端口