在传统开发中,开发人员需要独立部署容器,例如,并将应用程序放入容器中才能运行。这更加乏味和不便。嵌入式容器的出现改变了这种情况。当使用嵌入式容器时,我们不再需要对外部设施的任何支持。应用程序本身是一个可以独立运行的个人。作为生产力的典型代表,默认情况下使用该应用程序。让我们今天(基于)探索它。
据信该代码熟悉所有人。它是应用程序的入口。一切都必须从这里开始。我们直接跟进并来
静态函数创建一个实例,并调用该方法,并且构造函数继续跟进
在这里,我们关注如何推断应用程序的类型。简而言之,根据课程路径下是否有指定的文件来判断。我们的示例中的类型是推断的。然后来到示例方法
消除逻辑后,该方法主要做了两件事:
嗯,嵌入式?看来这两个步骤隐藏了神秘。浏览这两个步骤的源代码很容易知道,而刷新无非是调用其方法。
AnnotationConfigservletWebserverapplicationContext
可以看出,观察到的继承树是我们对红色圆圈非常熟悉,并在传统环境中使用。红色圆圈中的零件还可以猜测我们对名称的关注的名称。
更深入的更深层次,它继承了自我启示,并根据父级提供正确的支持并阅读和分析配置类。
该功能的这一部分是由代理商实现的。这两个兄弟也是我们的老朋友,这与嵌入式容器的推出无关,因此我们不会说太多。
WeberverapplicaitonContext接下来,我们的重点将下降。让我们看一下它的定义
查看其关联的定义
这是对嵌入式容器的抽象,它代表一个已完全配置的容器。换句话说,最终用户无需注意容器的特定细节,只需要知道如何启动或关闭它;并负责创建,启动或关闭它(即管理其生命周期)作为最终用户在正确的时间。
ServletWebServerApplicationContext实现了界面,其创建和管理在其自身的刷新过程中被凝结,也就是说,当它被称为时。特别是调用挂钩方法的时间,此方法的时机是:
创建的时机是由类型类型中唯一的唯一的时间创建。注意在这里携带参数 - 此参数非常重要,我们将稍后讨论。
此后,立即注册了两种类型的组件来管理生命周期,其中一种用于优雅闭合,另一种用于开始或停止。
它是一个定义的基本组件,本文的主题不是它。但是,为了促进通话顺序,这是一个简短的说法:它是由驾驶员驱动的。初始化类型后,将在其中进行调整和处理。
在这一点上,分析如何启动嵌入式容器。
ServletContextInitializer提到,在创建时它将带有一个参数,并且其类型为。
后者的作用是提供的标准初始化设备。我们还可以在中间配置,不同之处在于,其生命周期是管理的而不是容器。
步骤1、2和3相对简单。让我们来看看。让我们看一下步骤4。
当初始化时,所有这些都将被检索;如果仍然有本地或类型的类型,它们将被包装到相应的菜单中,最后对All.LET进行整理。LET查看如何将其添加到它中。
从继承树可以看出,这也可以实现。查看其方法
实施方法
最终意识到
但是,一个直接添加到动态中,没有其他。
在帖子中,我们分析了何时创建并启动了嵌入式容器,但没有提及它是如何创建的。在这些容器中,我不会盲目bb ~~