来自 Spring 的 ContextLoaderListener 如何成为 运行,即使 web.xml 不包含它?
How is ContextLoaderListener from Spring being run even when web.xml does not include it?
我有一个从另一个使用 spring 的团队继承的网络应用程序。我一直在尝试调试一些奇怪的行为,并希望 "turn off" any spring servlets/filters/context-listeners.
所以我删除了 web.xml 中看起来像这样的条目...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
然而不知何故,在我们的应用程序 clean/build 和 运行 之后,我在方法 contextInitialized 上点击了 org.springframework.web.context.ContextLoaderListener。
所以我的问题是,如果我的 web.xml 不再将 ContextLoadListener 声明为 运行 how/why 的侦听器,它是 运行 吗?我查看了 Spring 3.2.3-RELEASE 的源代码似乎没有 Servlet 3.0 注释@WebServletContextListener。
那么why/how这个上下文监听器是运行ning吗?
引入了 Servlet 3.0 ServletContainerInitializer
Interface which allows a library/runtime to be notified of a web
application's startup phase and perform any required programmatic
registration of servlets, filters, and listeners in response to it.
如果您的类路径上有 spring-web jar,它会隐式注册它自己的此接口的实现,SpringServletContainerInitializer
. This in turn scans for implementations of WebApplicationInitializer
在类路径上。
你显然有 SpringWebApplicationInitializer
其中
[...] initializes Spring context by adding a Spring
ContextLoaderListener
to the ServletContext
.
您看到的 ContextLoaderListener
很可能来自于此。
我有一个从另一个使用 spring 的团队继承的网络应用程序。我一直在尝试调试一些奇怪的行为,并希望 "turn off" any spring servlets/filters/context-listeners.
所以我删除了 web.xml 中看起来像这样的条目...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
然而不知何故,在我们的应用程序 clean/build 和 运行 之后,我在方法 contextInitialized 上点击了 org.springframework.web.context.ContextLoaderListener。
所以我的问题是,如果我的 web.xml 不再将 ContextLoadListener 声明为 运行 how/why 的侦听器,它是 运行 吗?我查看了 Spring 3.2.3-RELEASE 的源代码似乎没有 Servlet 3.0 注释@WebServletContextListener。
那么why/how这个上下文监听器是运行ning吗?
引入了 Servlet 3.0 ServletContainerInitializer
Interface which allows a library/runtime to be notified of a web application's startup phase and perform any required programmatic registration of servlets, filters, and listeners in response to it.
如果您的类路径上有 spring-web jar,它会隐式注册它自己的此接口的实现,SpringServletContainerInitializer
. This in turn scans for implementations of WebApplicationInitializer
在类路径上。
你显然有 SpringWebApplicationInitializer
其中
[...] initializes Spring context by adding a Spring
ContextLoaderListener
to theServletContext
.
您看到的 ContextLoaderListener
很可能来自于此。