Java ApplicationContextException:初始化器类未实现ApplicationContextInitializer接口

Java ApplicationContextException:初始化器类未实现ApplicationContextInitializer接口,java,spring,jetty,spring-web,Java,Spring,Jetty,Spring Web,我使用的是macOS High Sierra(版本10.13.2),我通过IntelliJ IDEA 2017.3.2(社区版)使用的是java版本1.8.0_151。我试图在本地运行JAR,但引发了以下异常: [main] ERROR ContextLoader:350 - Context initialization failed org.springframework.context.ApplicationContextException: Initializer class do

我使用的是macOS High Sierra(版本10.13.2),我通过IntelliJ IDEA 2017.3.2(社区版)使用的是java版本1.8.0_151。我试图在本地运行JAR,但引发了以下异常:

    [main] ERROR ContextLoader:350 - Context initialization failed
org.springframework.context.ApplicationContextException: Initializer class does not implement ApplicationContextInitializer interface: class xxx.xxxxxxx.xxxxxxxxxx.xx.xxxx.xxxxxxx.PropertyContextInitializer
    at org.springframework.web.context.ContextLoader.loadInitializerClass(ContextLoader.java:520)
    at org.springframework.web.context.ContextLoader.determineContextInitializerClasses(ContextLoader.java:508)
    at org.springframework.web.context.ContextLoader.customizeContext(ContextLoader.java:465)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:442)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:843)
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:533)
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:816)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:345)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778)
    at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:113)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131)
    at org.eclipse.jetty.server.Server.start(Server.java:422)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:105)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
    at org.eclipse.jetty.server.Server.doStart(Server.java:389)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at xxx.xxxxxxx.xxxxxxxxxx.xx.xxxx.xxxxxxx.AFJetty.start(AFJetty.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
    at xxx.xxxxxxx.xxxxxxxxxx.xx.xxxx.xxxxxxx.xxxx.AFJettyMain.main(AFJettyMain.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.uiDesigner.snapShooter.SnapShooter.main(SnapShooter.java:59)
PropertyContadeInitializer的对应行如下所示:

Class<?> clazz = ClassUtils.forName(className, ClassUtils.getDefaultClassLoader());
if (!ApplicationContextInitializer.class.isAssignableFrom(clazz)) {
    throw new ApplicationContextException("Initializer class does not implement ApplicationContextInitializer interface: " + clazz);
}
为false,clazz为“类xxx.xxxxxxx.xxxxxxxxx.xx.xxxxx.xxxxxxx.PropertyContactExiteInitializer”,表达式

ApplicationContextInitializer.class.isAssignableFrom(xxx.xxxxxxx.xxxxxxxxxx.xx.xxxx.xxxxxxx.PropertyContextInitializer.class)
这是真的!事实上,类PropertyContadeInitializer具有以下定义:

public class PropertyContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
公共类PropertyContextInitializer实现ApplicationContextInitializer{

它构建得很好,所以我真的无法理解为什么会抛出这样的异常。有人能帮忙吗?谢谢。

看起来你在启动类中做了一些奇怪的事情。你自己启动服务器,试图部署一些东西。你遇到了类加载问题。如果类也驻留在同一个类加载器中,那么它是可分配的。相同的cl不同类加载器中的ass将导致类强制转换异常。你确定你实现的ApplicationContextInitializer是Spring吗?@M.Deinum,我想你给我设置了正确的路径,我想我在这里使用的是不同的类加载器。@Julien,谢谢,但是的,它是Spring的。@JacopoLanzoni值得一看;)
public class PropertyContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {