org.springframework.web.WebAbblicationInitializer.onStartup 不会覆盖接口方法

org.springframework.web.WebAbblicationInitializer.onStartup won't Override interface method

我正在尝试纯 java(没有 web.xml)Spring WebMVC 项目,但我 运行 遇到了配置文件的特殊问题。我正在使用 this example 中的代码,其中显示 "A 100% code-based approach to configuration." 但是,eclipse 说我必须删除 @Override 注释,因为 onStartup 不会 "implement a superclass method."

这似乎是我正在使用的 Servlet 或 Spring 版本的问题,但我真的不知道我可以将它们中的任何一个更改为什么来解决这个问题。

这是一个 Maven 项目。我想通过调整我的 Maven 依赖项来解决这个问题,而不是使用 Eclipse 配置。

这是配置文件

package com.peak15.jumpgate;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class MyWebAppInitializer implements WebApplicationInitializer {

    @Override // TODO figure out why this doesn't override
    public void onStartup(ServletContext servletContext) throws ServletException {
        WebApplicationContext context = getContext();
        servletContext.addListener(new ContextLoaderListener(context));
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/*");
    }

    private AnnotationConfigWebApplicationContext getContext() {
        AnnotationConfigWebApplicationContext context
            = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation("com.peak15.jumpgate");
        return context;
    }
 }

这里是pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>jumpgate</groupId>
  <artifactId>jumpgate2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>JumpGateII</name>
  <properties>
        <jdk.version>1.8</jdk.version>
        <spring.version>3.2.13.RELEASE</spring.version>
  </properties>
  <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.0.1</version>
        </dependency> 
    </dependencies>
</project>

检查您是否安装了 jdk 1.8 -> 如果没有,Eclipse 默认为 Java 1.5 并且您 类 实现了接口方法(在 Java 1.6 可以用@Override 注解,但是在Java 1.5 只能应用于覆盖超类方法的方法)。

您还可以将 Maven 编译器插件添加到您的 pom 以确保它与最新的 Java 版本一起工作:

<plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>                
        </plugin>
</plugins>

希望引起问题。