将ContextLoaderListener添加到ServletContext的目的是什么?

时间:2017-05-09 09:03:13

标签: java spring spring-mvc

在阅读了几篇关于用纯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的目的究竟是什么?

1 个答案:

答案 0 :(得分:0)

一般来说,使用ContextLoaderListener纯粹是可选的。它用于明确地将ApplicationContextServletContext绑定在一起。

现在,我将你的问题改为:

  

将ContextLoaderListener添加到 JspCServletContext?

的目的是什么?

在您的情况下,正如您所注意到的,即使您向ContextLoaderListener提供了ServletContext,也不会使用它。因此,保持简单,并在此删除无用的ContextLoaderListener