- 用户 正在部署Web应用程序WAR 。
- Servlet容器 (Tomcat)读取
web.xml
。 - Servlet 容器*
ContextLoaderListener
正在实例化Servlet上下文侦听器(如果定义在<listener>
内部web.xml
)。 *ContextLoaderListener
WebApplicationContext
使用应用程序上下文XML配置创建新的。- 您的ROOT上下文Bean是
BeanFactory
在应用程序上下文内部注册和实例化的。
DispatcherServlet
正在 由servlet容器 实例化。DispatcherServlet
创建自己的WebApplicationContext
(WEB-INF/{servletName}-servlet.xml
默认情况下)以ROOT上下文作为其父级。- 您的servlet bean是
BeanFactory
在应用程序上下文内部注册和实例化的。 DispatcherServlet
注册一些默认的bean,以防您自己没有提供它们。
Servlet 3功能可以实现这一功能。
- 用户 正在部署Web应用程序WAR 。
- Servlet容器 搜索
ServletContainerInitializer
通过Java 实现的类ServiceLoader
。 - 通过servlet container*
SpringServletContainerInitializer
查找并实例化Spring 。 * - Spring的初始化 程序 读取 Web应用程序的类路径并搜索
WebApplicationInitializer
实现。 - 你
WebApplicationInitializer
被发现(顺便说一句, 检查它的JavaDoc !!! )和实例化 的SpringServletContainerInitializer
。- 您
WebApplicationInitializer
WebApplicationContext
使用XML或@Configuration
基于配置的新ROOT 。 - 您将
WebApplicationInitializer
WebApplicationContext
使用XML或@Configuration
基于基础的配置创建新的servlet 。 - 您
WebApplicationInitializer
DispatcherServlet
将使用上一步中的上下文创建并注册新的上下文。
- 您
- Servlet容器 完成了Web应用程序的初始化,并实例化了在先前步骤中由其类注册的组件(在我的示例中 没有 )。
基于Java的方法更加灵活。您可以将上下文创建留给servlet容器
DispatcherServlet,甚至将其整个实例留给
DispatcherServletservlet容器(只需注册servlet
DispatcherServlet.class而不是其实例)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)