Java WebApplicationInitializer调用了两次

Java WebApplicationInitializer调用了两次,java,spring,spring-mvc,tomcat,Java,Spring,Spring Mvc,Tomcat,我正在用SpringMVC和ZK框架创建一个web应用程序。我有一个根项目(jar),其中包含spring和zk的所有基本配置,还有一个调用初始值设定项的web应用程序项目(war) 这是我根项目中的初始值设定项 public class DefaultInitializer implements WebApplicationInitializer { private Class<?> config; public void onStartup(ServletCo

我正在用SpringMVC和ZK框架创建一个web应用程序。我有一个根项目(jar),其中包含spring和zk的所有基本配置,还有一个调用初始值设定项的web应用程序项目(war)

这是我根项目中的初始值设定项

public class DefaultInitializer implements WebApplicationInitializer {

    private Class<?> config;

    public void onStartup(ServletContext container) throws ServletException {
        init();

        // Create the 'root' Spring application context
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(config);

        // Manage the lifecycle of the root application context
        container.addListener(new ContextLoaderListener(rootContext));
        container.addListener(new RequestContextListener());
        container.addListener(new HttpSessionListener());

        // Register and map the dispatcher servlet
        ServletRegistration.Dynamic dispatcher = container.addServlet(
                "mvc", new DispatcherServlet(rootContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

        ServletRegistration.Dynamic zkDispatcher = container.addServlet(
                "zkLoader", new DHtmlLayoutServlet());
        zkDispatcher.setLoadOnStartup(2);
        zkDispatcher.setInitParameter("update-uri", "/zkau");
        zkDispatcher.addMapping("*.zul");
        zkDispatcher.addMapping("*.zhtml");
        zkDispatcher.addMapping("/zk/*");

        ServletRegistration.Dynamic zkUpdater = container.addServlet(
                "auEngine", new DHtmlUpdateServlet());
        zkUpdater.setLoadOnStartup(3);
        zkUpdater.addMapping("/zkau/*");

    }

    protected void setConfig(Class<?> config) {
        this.config = config;
    }

    protected void init() {
        setConfig(BaseConfig.class);
    }

}
其中WebConfig是一个组件扫描并启用WebMVC Java配置

问题是当我用web应用程序启动服务器时。onStartup被调用两次,然后抛出一个NullPointerException

我只有一个web.xml,我只注册了一个DispatcherServlet,在我的pom中只有一个spring-web.jar被导入

我正在使用Spring4、Java1.8和TomcatV.8

有人能告诉我发生了什么事吗

谢谢


J.

问题在于类的定义DefaultInitializer

DefaultInitializer应该是抽象的,因此当Initializer扩展DefaultInitializer时,只创建一个实现WebApplicationInitializer的实例

public class Initializer extends DefaultInitializer {

    @Override
    public void init() {
        setConfig(WebConfig.class);
    }

}