- 这个方法会调用createWebServer()方法 。
// 最核心的俩行代码private void createWebServer() { ...... // 获取web容器,多个或者没有的时候报错 ServletWebServerFactory factory = getWebServerFactory(); // 调用这个容器的getWebServer方法,上面的启动tomcat的方法! this.webServer = factory.getWebServer(getSelfInitializer()); ......}
- getWebServerFactory控制项目组有且只能有一个web容器!
protected ServletWebServerFactory getWebServerFactory() { // Use bean names so that we don't consider the hierarchy // 得到所有类型为ServletWebServerFactory的Bean 。TomcatServletWebServerFactory、JettyServletWebServerFactory、UndertowServletWebServerFactory都是他得到子类! String[] beanNames = getBeanFactory().getBeanNamesForType(ServletWebServerFactory.class); // 不存在,报错 if (beanNames.length == 0) { throw new ApplicationContextException("Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean."); } // 存在不止一个,报错! if (beanNames.length > 1) { throw new ApplicationContextException("Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans : " + StringUtils.arrayToCommaDelimitedString(beanNames)); } // 返回唯一的一个web容器! return getBeanFactory().getBean(beanNames[0], ServletWebServerFactory.class);}获取tomcat的配置
- 自动配置类ServletWebServerFactoryAutoConfiguration上除了import三个web容器,还import了BeanPostProcessorsRegistrar 。
- BeanPostProcessorsRegistrar实现了ImportBeanDefinitionRegistrar,所以他会在spring启动的时候调用registerBeanDefinitions方法 。
- registerBeanDefinitions会注册一个Bean:webServerFactoryCustomizerBeanPostProcessor 。
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { // Bean工厂,一个Aware回调进行赋值 if (this.beanFactory == null) { return; } // 注册webServerFactoryCustomizerBeanPostProcessor这个Bean 。 registerSyntheticBeanIfMissing(registry, "webServerFactoryCustomizerBeanPostProcessor", WebServerFactoryCustomizerBeanPostProcessor.class, WebServerFactoryCustomizerBeanPostProcessor::new); // 注册errorPageRegistrarBeanPostProcessor registerSyntheticBeanIfMissing(registry, "errorPageRegistrarBeanPostProcessor", ErrorPageRegistrarBeanPostProcessor.class, ErrorPageRegistrarBeanPostProcessor::new);}
- webServerFactoryCustomizerBeanPostProcessor实现了BeanPostProcessor,所以他会在启动的时候调用postProcessBeforeInitialization方法 。
经验总结扩展阅读
-
-
-
护肤 网友公认“减龄”好物,不到百元的价格,却是实打实的抗老好物
-
对比普通人如何秒变上镜脸?不用整容!简单三步就可get网感自拍!
-
未来一周,财运旺盛,财神呵护,事业得心应手,注定成为富翁
-
-
棕色不想发色太张扬,就选择乖巧不挑人的棕色系吧,非常百搭不会出错
-
-
skyseed天代绿水鬼手表价格,劳力士绿水鬼怎么有的才卖1仟多,质量靠普吗?
-
肌肤 水乳护肤品套装排行榜前十名 好用还不贵的水乳护肤品套装推荐
-
-
身体|人正在睡觉时,为何身体会突然一抖?看完涨知识了
-
灵语塔罗 灵语塔罗:狮子座11月情感运势,关系没任何起色,一直停滞在这里
-
-
-
-
-
乳腺癌 25岁女白领患“乳腺癌”,得知后悔大哭,或许与1个漂亮东西有关
-
-