使用FileSystemXmlApplicationContext编译Spring应用程序时出现NoSuchMethodError

Sal*_*zmi 5 java spring maven

当运行一个非常基本的Spring应用程序并使用FileSystemXmlApplicationContext创建Bean Factory时,我遇到NoSuchMethodError.

beans.xml的文件是在与pom.xml的应用程序的根目录,如下所示:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

<bean id="person" class="com.xyz.practice.Person">

</bean>

</beans>
Run Code Online (Sandbox Code Playgroud)

Person类看起来像:

  package com.xyz.practice;

public class Person {
    public void speak(){
        System.out.println("Hello I'm a Person");
    }
}
Run Code Online (Sandbox Code Playgroud)

主类App.java如下所示:

    package com.xyz.practice;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class App {

    public static void main(String[] args) {
        ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
        Person person = (Person) context.getBean("person");
        person.speak();
    }

}
Run Code Online (Sandbox Code Playgroud)

运行应用程序时,会引发以下异常:

INFO: Loading XML bean definitions from file [/home/salmank/Documents/springWithAbc/beans.xml]
Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactory.clearMetadataCache()V
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:185)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
    at com.xyz.practice.App.main(App.java:9)
Run Code Online (Sandbox Code Playgroud)

Jen*_*ens 2

您的类路径中有不兼容的 jar 文件。检查版本spring-context-supportspring-beans 缺少的方法是在spring 4.2中引入的:

无效清除元数据缓存()

清除合并的 Bean 定义缓存,删除尚未被视为符合完整元数据缓存条件的 Bean 条目。通常在更改原始 bean 定义后触发,例如在应用 BeanFactoryPostProcessor 后。请注意,此时已经创建的 bean 的元数据将被保留。

自:4.2

另请参阅:getBeanDefinition(java.lang.String)、ConfigurableBeanFactory.getMergedBeanDefinition(java.lang.String)

检查版本是否spring-context-support相同spring-beans

顺便:去掉xsd位置末尾的Version:

http://www.springframework.org/schema/beans/spring-beans.xsd">
Run Code Online (Sandbox Code Playgroud)