我有一个webapp我继承自另一个使用spring的团队。我一直试图调试一些奇怪的行为,并希望"关闭"任何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>
然而,在我们的应用程序清理/构建和运行之后,我在方法contextInitialized上点击了org.springframework.web.context.ContextLoaderListener。
所以我的问题是,如果我的web.xml不再将ContextLoadListener声明为监听器来运行它/为什么运行?我看了,Spring 3.2.3-RELEASE的源代码似乎没有Servlet 3.0 Annotation @WebServletContextListener。
那么为什么/如何运行这个Context Listener?
答案 0 :(得分:2)
Servlet 3.0引入了ServletContainerInitializer
允许向库/运行时通知Web的接口 应用程序的启动阶段并执行任何所需的程序 注册servlet,过滤器和监听器以响应它。
如果你的类路径上有spring-web jar,它会隐式注册它自己的接口实现SpringServletContainerInitializer
。这反过来会扫描类路径上WebApplicationInitializer
的实现。
你显然有SpringWebApplicationInitializer
[...]通过添加Spring来初始化Spring上下文
ContextLoaderListener
的{{1}}。
您认为最有可能发生的ServletContext
。