EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置

@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@ConditionalOnWebApplication
@Import(BeanPostProcessorsRegistrar.class)
//导入BeanPostProcessorsRegistrar:Spring注解版;给容器中导入一些组件
//导入了EmbeddedServletContainerCustomizerBeanPostProcessor:
//后置处理器:bean初始化前后(创建完对象,还没赋值赋值)执行初始化工作
public class EmbeddedServletContainerAutoConfiguration { @Configuration
@ConditionalOnClass({ Servlet.class, Tomcat.class })//判断当前是否引入了Tomcat依赖;
@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)//判断当前容器没有用户自己定义EmbeddedServletContainerFactory:嵌入式的Servlet容器工厂;作用:创建嵌入式的Servlet容器
public static class EmbeddedTomcat { @Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory();
} } /**
* Nested configuration if Jetty is being used.
*/
@Configuration
@ConditionalOnClass({ Servlet.class, Server.class, Loader.class,
WebAppContext.class })
@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
public static class EmbeddedJetty { @Bean
public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
return new JettyEmbeddedServletContainerFactory();
} } /**
* Nested configuration if Undertow is being used.
*/
@Configuration
@ConditionalOnClass({ Servlet.class, Undertow.class, SslClientAuthMode.class })
@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
public static class EmbeddedUndertow { @Bean
public UndertowEmbeddedServletContainerFactory undertowEmbeddedServletContainerFactory() {
return new UndertowEmbeddedServletContainerFactory();
} }

  1)、EmbeddedServletContainerFactory(嵌入式Servlet容器工厂)

public interface EmbeddedServletContainerFactory {

   //获取嵌入式的Servlet容器
EmbeddedServletContainer getEmbeddedServletContainer(
ServletContextInitializer... initializers); }

aaarticlea/png;base64,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" alt="" />

  2)、EmbeddedServletContainer:(嵌入式的Servlet容器)

aaarticlea/png;base64,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" alt="" />

  3)、以TomcatEmbeddedServletContainerFactory为例

@Override
public EmbeddedServletContainer getEmbeddedServletContainer(
ServletContextInitializer... initializers) {
//创建一个Tomcat
Tomcat tomcat = new Tomcat(); //配置Tomcat的基本环节
File baseDir = (this.baseDirectory != null ? this.baseDirectory
: createTempDir("tomcat"));
tomcat.setBaseDir(baseDir.getAbsolutePath());
Connector connector = new Connector(this.protocol);
tomcat.getService().addConnector(connector);
customizeConnector(connector);
tomcat.setConnector(connector);
tomcat.getHost().setAutoDeploy(false);
configureEngine(tomcat.getEngine());
for (Connector additionalConnector : this.additionalTomcatConnectors) {
tomcat.getService().addConnector(additionalConnector);
}
prepareContext(tomcat.getHost(), initializers); //将配置好的Tomcat传入进去,返回一个EmbeddedServletContainer;并且启动Tomcat服务器
return getTomcatEmbeddedServletContainer(tomcat);
}

  4)、我们对嵌入式容器的配置修改是怎么生效?

ServerProperties、EmbeddedServletContainerCustomizer

  EmbeddedServletContainerCustomizer:定制器帮我们修改了Servlet容器的配置?

  怎么修改的原理?

  5)、容器中导入了EmbeddedServletContainerCustomizerBeanPostProcessor

//初始化之前
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
//如果当前初始化的是一个ConfigurableEmbeddedServletContainer类型的组件
if (bean instanceof ConfigurableEmbeddedServletContainer) {
//
postProcessBeforeInitialization((ConfigurableEmbeddedServletContainer) bean);
}
return bean;
} private void postProcessBeforeInitialization(
ConfigurableEmbeddedServletContainer bean) {
//获取所有的定制器,调用每一个定制器的customize方法来给Servlet容器进行属性赋值;
for (EmbeddedServletContainerCustomizer customizer : getCustomizers()) {
customizer.customize(bean);
}
} private Collection<EmbeddedServletContainerCustomizer> getCustomizers() {
if (this.customizers == null) {
// Look up does not include the parent context
this.customizers = new ArrayList<EmbeddedServletContainerCustomizer>(
this.beanFactory
//从容器中获取所有这葛类型的组件:EmbeddedServletContainerCustomizer
//定制Servlet容器,给容器中可以添加一个EmbeddedServletContainerCustomizer类型的组件
.getBeansOfType(EmbeddedServletContainerCustomizer.class,
false, false)
.values());
Collections.sort(this.customizers, AnnotationAwareOrderComparator.INSTANCE);
this.customizers = Collections.unmodifiableList(this.customizers);
}
return this.customizers;
}

  ServerProperties也是定制器

  步骤:

  1)、SpringBoot根据导入的依赖情况,给容器中添加相应的EmbeddedServletContainerFactory【TomcatEmbeddedServletContainerFactory】

  2)、容器中某个组件要创建对象就会惊动后置处理器;EmbeddedServletContainerCustomizerBeanPostProcessor;

  只要是嵌入式的Servlet容器工厂,后置处理器就工作;

  3)、后置处理器,从容器中获取所有的EmbeddedServletContainerCustomizer,调用定制器的定制方法

  嵌入式Servlet容器启动原理;

  什么时候创建嵌入式的Servlet容器工厂?什么时候获取嵌入式的Servlet容器并启动Tomcat;

  获取嵌入式的Servlet容器工厂:

  1)、SpringBoot应用启动运行run方法

  2)、refreshContext(context);SpringBoot刷新IOC容器【创建IOC容器对象,并初始化容器,创建容器中的每一个组件】;如果是web应用创建    AnnotationConfigEmbeddedWebApplicationContext,否则:AnnotationConfigApplicationContext

  3)、refresh(context);刷新刚才创建好的ioc容器;

  

public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// Prepare this context for refreshing.
prepareRefresh(); // Tell the subclass to refresh the internal bean factory.
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); // Prepare the bean factory for use in this context.
prepareBeanFactory(beanFactory); try {
// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory); // Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory); // Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory); // Initialize message source for this context.
initMessageSource(); // Initialize event multicaster for this context.
initApplicationEventMulticaster(); // Initialize other special beans in specific context subclasses.
onRefresh(); // Check for listener beans and register them.
registerListeners(); // Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory); // Last step: publish corresponding event.
finishRefresh();
} catch (BeansException ex) {
if (logger.isWarnEnabled()) {
logger.warn("Exception encountered during context initialization - " +
"cancelling refresh attempt: " + ex);
} // Destroy already created singletons to avoid dangling resources.
destroyBeans(); // Reset 'active' flag.
cancelRefresh(ex); // Propagate exception to caller.
throw ex;
} finally {
// Reset common introspection caches in Spring's core, since we
// might not ever need metadata for singleton beans anymore...
resetCommonCaches();
}
}
}

  4)、 onRefresh(); web的ioc容器重写了onRefresh方法

  5)、webioc容器会创建嵌入式的Servlet容器;createEmbeddedServletContainer();

  6)、获取嵌入式的Servlet容器工厂:

  EmbeddedServletContainerFactory containerFactory = getEmbeddedServletContainerFactory();

  ​ 从ioc容器中获取EmbeddedServletContainerFactory 组件;TomcatEmbeddedServletContainerFactory创建对象,后置处理器一看是这个对象,就获取所有的定制器来先定制Servlet容器的相关配置;

  7)、使用容器工厂获取嵌入式的Servlet容器:this.embeddedServletContainer = containerFactory .getEmbeddedServletContainer(getSelfInitializer());

  8)、嵌入式的Servlet容器创建对象并启动Servlet容器;

  先启动嵌入式的Servlet容器,再将ioc容器中剩下没有创建出的对象获取出来;

  IOC容器启动创建嵌入式的Servlet容器

尚硅谷springboot学习26-嵌入式servlet容器自动配置、启动原理的更多相关文章

  1. springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理

    1.嵌入式Servlet容器自动配置原理 1.1 在spring-boot-autoconfigure-1.5.9.RELEASE.jar => springboot自动配置依赖 jar包下,E ...

  2. 4_7.springboot2.x嵌入式servlet容器自动配置原理

    概述 Spring Boot对所支持的Servlet Web服务器实现做了建模抽象: Servlet容器类型  WebServer模型接口 WebServer工厂实现类 Tomcat    Tomca ...

  3. 嵌入式Servlet容器自动配置和启动原理

    EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置? @AutoConfigureOrder(Ordered.HIGHEST_PRE ...

  4. 【串线篇】spring boot嵌入式Servlet容器自动配置原理

    EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置? @AutoConfigureOrder(Ordered.HIGHEST_PREC ...

  5. Springboot学习:底层依赖与自动配置的原理

    springboot依赖的父项目 我们在创建springboot项目的时候,设置了一个父项目: 这个项目可以点进去,可以发现它依赖于另一个父项目 再次点进去,发现没有依赖父项目了 观察这个项目的pom ...

  6. 尚硅谷springboot学习14-自动配置原理

    配置文件能配置哪些属性 配置文件能配置的属性参照 自动配置的原理 1).SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 2).@Ena ...

  7. 尚硅谷springboot学习27-使用外置servlet容器

    嵌入式Servlet容器:应用打成可执行的jar ​ 优点:简单.便携: ​ 缺点:默认不支持JSP.优化定制比较复杂(使用定制器[ServerProperties.自定义EmbeddedServle ...

  8. 尚硅谷springboot学习25-嵌入式Servlet容器

    SpringBoot默认使用Tomcat作为嵌入式的Servlet容器:

  9. 尚硅谷springboot学习7-yaml配置文件

    SpringBoot使用一个全局的配置文件,配置文件名是固定的: application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值 ...

随机推荐

  1. php中wampserver多站点配置

    1.修改默认端口 : 2.添加多站点: 3.在文件的结尾添加一个站点配置: <VirtualHost *:8080> ServerAdmin webmaster@duoduo.com Do ...

  2. 2019-04-10-day029-粘包处理

    内容回顾 osi五层协议 不是真实存在的,只是抽象出来的模型 应用层 传输层 TCP/UDP TCP :全双工,可靠的,面向连接的,速度慢,对数据大小没有限制 建立连接 :三次握手 SYN ACK 断 ...

  3. 基于Verilog的按键检测实验

    一.模块框图及基本思路 detect_module:检测按键输入脚的电平边沿变化 delay_10ms_module:延时消抖,输出按键有效信号 debounce_module:前两个模块的组合模块 ...

  4. js 拷贝clone

    array Array.prototype.clone=function(){ return this.slice(0); } 对象 var o = {a: [1]}; //浅拷贝 var o1 = ...

  5. 【paper】MTCNN

    参考 1. MTCNN笔记; 完

  6. s21day11 python笔记

    s21day11 python笔记 一.函数小高级 函数名可以当作变量来使用 #示例一: def func(): print(123) func_list = [func, func, func] # ...

  7. Python全栈之路----常用模块学习----模块的种类和导入方法

    什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...

  8. alpha冲刺(3/10)

    前言 队名:旅法师 作业链接 队长博客 燃尽图 会议 会议照片 会议内容 陈晓彬(组长) 今日进展: 召开会议 安排任务 博客撰写 制定计划 问题困扰: 前后端的交互沟通有点缺失,以至后端进度很慢,需 ...

  9. springboot解决跨域问题

    在启动类里加入corsFilter import org.springframework.boot.SpringApplication; import org.springframework.boot ...

  10. liunx top命令详解

    1,当前服务器时间,up,服务器离上一次重启过了多久,多少个用户在使用,cpu平均负载,grep 'core id' /proc/cpuinfo | sort -u | wc -l  ,一般来说4个, ...