在阅读了几篇关于用纯Java替换xml配置的教程之后,Initializer
课程中有一条我不理解的声明:
public class Initializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext applicationContext;
applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(Config.class);
// What is the purpose of the following statement?
servletContext.addListener(new ContextLoaderListener(applicationContext));
ServletRegistration.Dynamic dispatcher;
dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(applicationContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
我的应用程序似乎在没有servletContext.addListener(...)
语句的情况下运行良好。
ServletContext
州内的官方文件,我不是你的意思:
/**
* TODO SERVLET3 - Add comments
* @param <T> TODO
* @param t TODO
* @throws UnsupportedOperationException If [...]
* @since Servlet 3.0
*/
public <T extends EventListener> void addListener(T t);
JspCServletContext
内的实现实际上是空的:
@Override
public <T extends EventListener> void addListener(T t) {
// NOOP
}
...那么将ContextLoaderListener
添加到ServletContext
的目的究竟是什么?
答案 0 :(得分:0)
一般来说,使用ContextLoaderListener
纯粹是可选的。它用于明确地将ApplicationContext
和ServletContext
绑定在一起。
现在,我将你的问题改为:
将ContextLoaderListener添加到 JspCServletContext?
的目的是什么?
在您的情况下,正如您所注意到的,即使您向ContextLoaderListener
提供了ServletContext
,也不会使用它。因此,保持简单,并在此删除无用的ContextLoaderListener
。